locationsystemui/locationsysui/locutils/src/locphonenumberformat.cpp
changeset 0 667063e416a2
child 16 6fcbaa43369c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/locutils/src/locphonenumberformat.cpp	Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2002 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: 
+*     Default implementation for number formatting.
+*
+*/
+
+
+// INCLUDE FILES
+#include <AknUtils.h>
+#include <AknLayoutDef.h>
+#include <AknLayout.lag>
+#include <eikfrlbd.h>
+#include <AknPhoneNumberGrouping.h>
+#include "locphonenumberformat.h"
+
+// CONSTANT DEFINITIONS
+
+// maximum phone number length
+const TInt KLocPhoneNumberMaxLen = 48;
+
+// ============= CLOCPHONENUMBERFORMAT MEMBER FUNCTIONS ===================
+
+// ---------------------------------------------------------------------------
+// CLocPhoneNumberFormat::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CLocPhoneNumberFormat* CLocPhoneNumberFormat::NewL()
+	{
+	CLocPhoneNumberFormat *self = new ( ELeave ) CLocPhoneNumberFormat;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CLocPhoneNumberFormat::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CLocPhoneNumberFormat::ConstructL()
+	{
+	iPNGEngine = CAknPhoneNumberGrouping::NewL(KLocPhoneNumberMaxLen);
+    }
+
+// ---------------------------------------------------------------------------
+// CLocPhoneNumberFormat::CLocPhoneNumberFormat
+// ---------------------------------------------------------------------------
+//
+CLocPhoneNumberFormat::CLocPhoneNumberFormat()
+	{
+    // Intentionally empty
+	}
+
+// ---------------------------------------------------------------------------
+// CLocPhoneNumberFormat::~CLocPhoneNumberFormat
+// ---------------------------------------------------------------------------
+//
+CLocPhoneNumberFormat::~CLocPhoneNumberFormat()
+	{
+	delete iPNGEngine;
+	}
+
+// ---------------------------------------------------------------------------
+// CLocPhoneNumberFormat::PhoneNumberFormatL
+// ---------------------------------------------------------------------------
+//
+TFormatResult CLocPhoneNumberFormat::PhoneNumberFormatL(
+    const TDesC& aNumberToFormat,
+    TDes& aFormattedString )
+	{
+	TFormatResult rc( EResultOK );
+	if ( iPNGEngine->Set(aNumberToFormat) != KErrNone )
+		{
+		// If we cannot group the number then just return 
+		// the ungrouped number
+		return rc;
+		}
+
+	HBufC* groupedPhoneNumber = 
+		HBufC::NewL(iPNGEngine->FormattedNumber().Length());
+	// CAknPhoneNumberGrouping takes care of grouping based on the 
+	// current settings. If the __SERIES60_PHONE_NUMBER_GROUPING 
+	// feature flag is disabled then grouping is not done.
+	
+	TPtr grpPhoneNumberDesc = groupedPhoneNumber->Des();
+	iPNGEngine->CopyFormattedNumber(grpPhoneNumberDesc);
+	if (aFormattedString.MaxLength() < groupedPhoneNumber->Length())
+		{
+		// Store only as much as can be fitted into the resultant 
+		// Descriptor
+		rc = EResultTruncated;
+		aFormattedString = 
+			groupedPhoneNumber->Right( groupedPhoneNumber->Length() -
+										(groupedPhoneNumber->Length() - 
+										aFormattedString.MaxLength()) );
+		}
+	else
+		{
+		aFormattedString.Copy(*groupedPhoneNumber);
+		}
+
+	delete groupedPhoneNumber;
+	return rc;
+	}
+
+// ---------------------------------------------------------------------------
+// CLocPhoneNumberFormat::PhoneNumberGroupL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C HBufC* CLocPhoneNumberFormat::PhoneNumberGroupL( const TDesC& aNumberToGroup )
+    {
+	if ( iPNGEngine->Set(aNumberToGroup) != KErrNone )
+		{
+		// If we cannot group the number then just return NULL
+		return NULL;
+		}
+
+	HBufC* groupedPhoneNumber = HBufC::NewL(iPNGEngine->FormattedNumber().Length());
+		
+	// CAknPhoneNumberGrouping takes care of grouping based on the 
+	// current settings. If the __SERIES60_PHONE_NUMBER_GROUPING 
+	// feature flag is disabled then grouping is not done.
+	
+	TPtr grpPhoneNumberDesc = groupedPhoneNumber->Des();
+	iPNGEngine->CopyFormattedNumber( grpPhoneNumberDesc );
+	
+	return groupedPhoneNumber;	
+    }
+
+// ---------------------------------------------------------------------------
+// CLocPhoneNumberFormat::PhoneNumberFormatL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TFormatResult CLocPhoneNumberFormat::PhoneNumberFormatL(
+    const TDesC& aNumberToFormat,
+    TDes& aFormattedString,
+    AknTextUtils::TClipDirection aClipDirection,
+    CEikFormattedCellListBox *aListBox,
+    TInt aItemIndex,
+    TInt aSubCellNumber,
+    TInt aIcons )
+	{
+	TFormatResult rc = PhoneNumberFormatL( aNumberToFormat, aFormattedString );
+    if (aIcons == 0)
+    	{
+  		// There is no Icon so just use the AknTextUtils API
+   		if( AknTextUtils::ClipToFit( aFormattedString, aClipDirection, 
+   										aListBox, aItemIndex,
+   										aSubCellNumber ))
+   			{
+   			rc = EResultClipped;
+   			}
+    	}
+	else
+		{
+		// Adjust for the Icon Space.
+	    CFormattedCellListBoxData *data = 
+	        aListBox->ItemDrawer()->FormattedCellData();
+	    const CFont *font = data->Font( aListBox->ItemDrawer()->Properties( 
+	                                            aItemIndex ), aSubCellNumber );
+		
+		//Obtain the layout parameters for this element from the Avkon Layout
+
+	    TAknLayoutText textLayout;
+	    textLayout.LayoutText(aListBox->Rect() , 
+			AKN_LAYOUT_TEXT_List_pane_texts__menu_single__Line_1(aIcons));
+	     
+		TRect rect = textLayout.TextRect();
+	    TInt width = rect.Width();
+
+		TInt clipgap = data->SubCellTextClipGap( aSubCellNumber );
+
+		if ( AknTextUtils::ClipToFit( aFormattedString, *font, width,
+	                                  aClipDirection, width + clipgap ) )
+			{
+			rc = EResultClipped;
+			}
+		}
+    return rc;
+    }
+
+//  End of File