diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/GroupExtension/src/CPguGroupNameQueryDlg.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/GroupExtension/src/CPguGroupNameQueryDlg.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,225 @@ +/* +* Copyright (c) 2005-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: Phonebook 2 group name query dialog. +* +*/ + + +#include "CPguGroupNameQueryDlg.h" + +// Phonebook 2 +#include "Pbk2GroupConsts.h" +#include +#include +#include + +// Virtual Phonebook +#include +#include +#include + +// System includes +#include +#include + +/// Unnamed namespace for local definitions +namespace { + +/** + * Strips directionality markers from given text. + * + * @param aText The text to strip. + */ +void StripCharacters( TDes& aText) + { + // Strip any directionality markers to get pure text + const TUint32 KPbk2LeftToRightMarker = 0x200F; + const TUint32 KPbk2RightToLeftMarker = 0x200E; + const TInt markersLength( 2 ); + TBuf bufMarkers; + bufMarkers.Append( KPbk2LeftToRightMarker ); + bufMarkers.Append( KPbk2RightToLeftMarker ); + AknTextUtils::StripCharacters( aText, bufMarkers ); + } + +} /// namespace + +// -------------------------------------------------------------------------- +// CPguGroupNameQueryDlg::CPguGroupNameQueryDlg +// -------------------------------------------------------------------------- +// + CPguGroupNameQueryDlg::CPguGroupNameQueryDlg + ( TDes& aDataText, MVPbkContactViewBase& aGroupsView, + MPbk2ContactNameFormatter& aNameFormatter ) : + CAknTextQueryDialog( aDataText ), + iGroupsListView( aGroupsView ), + iNameFormatter( aNameFormatter ) + { + } + +// -------------------------------------------------------------------------- +// CPguGroupNameQueryDlg::~CPguGroupNameQueryDlg +// -------------------------------------------------------------------------- +// +CPguGroupNameQueryDlg::~CPguGroupNameQueryDlg() + { + delete iOriginalName; + } + +// -------------------------------------------------------------------------- +// CPguGroupNameQueryDlg::ConstructL +// -------------------------------------------------------------------------- +// +inline void CPguGroupNameQueryDlg::ConstructL + ( TDes& aDataText, TBool aNameGeneration ) + { + // Take a copy of the original name + iOriginalName = HBufC::NewL( KGroupLabelLength ); + TPtr originalTextPtr = iOriginalName->Des(); + originalTextPtr.Append( aDataText ); + + if ( aNameGeneration ) + { + UpdateGroupTitleL(); + } + } + +// -------------------------------------------------------------------------- +// CPguGroupNameQueryDlg::NewL +// -------------------------------------------------------------------------- +// +CPguGroupNameQueryDlg* CPguGroupNameQueryDlg::NewL + ( TDes& aDataText, MVPbkContactViewBase& aGroupsView, + MPbk2ContactNameFormatter& aNameFormatter, + TBool aNameGeneration ) + { + CPguGroupNameQueryDlg* self = new ( ELeave ) CPguGroupNameQueryDlg + ( aDataText, aGroupsView, aNameFormatter ); + CleanupStack::PushL( self ); + self->ConstructL( aDataText, aNameGeneration ); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CPguGroupNameQueryDlg::OkToExitL +// -------------------------------------------------------------------------- +// +TBool CPguGroupNameQueryDlg::OkToExitL( TInt aButtonId ) + { + TBool result = CAknTextQueryDialog::OkToExitL( aButtonId ); + + HBufC* text = Text().AllocLC(); + TPtr textPtr( text->Des() ); + StripCharacters( textPtr ); + + // Format text + HBufC* formattedText = HBufC::NewLC( text->Length() ); + TPtr formattedTextPtr( formattedText->Des() ); + Pbk2PresentationUtils::TrimRightAppend( *text, formattedTextPtr ); + + TBool nameAlreadyExists = ContainsL( *formattedText ); + + if ( nameAlreadyExists ) + { + if (iOriginalName->CompareC( *formattedText ) != 0 ) + { + // Display information note + HBufC* prompt = StringLoader::LoadLC( + R_QTN_FLDR_NAME_ALREADY_USED, *formattedText ); + + CAknInformationNote* dlg = new(ELeave) CAknInformationNote( ETrue ); + dlg->ExecuteLD( *prompt ); + CleanupStack::PopAndDestroy(); // prompt + + CAknQueryControl* queryControl = QueryControl(); + if ( queryControl ) + { + CEikEdwin* edwin = static_cast( + queryControl->ControlByLayoutOrNull( EDataLayout ) ); + if ( edwin ) + { + edwin->SetSelectionL( edwin->TextLength(), 0 ); + } + } + result = EFalse; + } + } + + CleanupStack::PopAndDestroy( 2 ); // formattedText, text + return result; + } + +// -------------------------------------------------------------------------- +// CPguGroupNameQueryDlg::UpdateGroupTitleL +// -------------------------------------------------------------------------- +// +void CPguGroupNameQueryDlg::UpdateGroupTitleL() + { + TBool found = EFalse; + HBufC* groupTitle; + for ( TInt number = 1; !found; ++number ) + { + groupTitle = StringLoader::LoadLC + ( R_PHONEBOOK2_QTN_FLDR_DEFAULT_GROUP_NAME, number ); + + // Convert the digits if necessary + TPtr ptr = groupTitle->Des(); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); + + if ( !ContainsL( *groupTitle ) ) + { + Text().Copy( *groupTitle ); + found = ETrue; + } + CleanupStack::PopAndDestroy( groupTitle ); + } + } + +// -------------------------------------------------------------------------- +// CPguGroupNameQueryDlg::ContainsL +// Checks if the group view contains a group named similarly as the given +// name. +// -------------------------------------------------------------------------- +// +TBool CPguGroupNameQueryDlg::ContainsL( const TDesC& aText ) + { + TBool ret = EFalse; + + const TInt count( iGroupsListView.ContactCountL() ); + for ( TInt i(0); i < count; ++i ) + { + const MVPbkViewContact& contact = iGroupsListView.ContactAtL( i ); + HBufC* groupName = iNameFormatter.GetContactTitleOrNullL + ( contact.Fields(), + MPbk2ContactNameFormatter::EPreserveLeadingSpaces ); + + if ( groupName ) + { + TPtr groupNamePtr( groupName->Des() ); + StripCharacters( groupNamePtr ); + + if ( groupNamePtr.Compare( aText ) == 0 ) + { + ret = ETrue; + } + } + + delete groupName; + } + + return ret; + } + +// End of File