--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/CPbkGroupNameQueryDlg.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,174 @@
+/*
+* 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:
+* Provides methods for Group name query dialog.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkGroupNameQueryDlg.h" // This class' declaration
+#include <cntdb.h>
+#include <cntitem.h>
+#include <aknnotewrappers.h>
+#include <StringLoader.h>
+#include <PbkView.rsg>
+#include <CPbkContactEngine.h>
+
+
+namespace {
+
+// ==================== LOCAL FUNCTIONS ====================
+
+/**
+ * Returns true if aDesCArray contains aText by excact comparison.
+ * Discards all directionality markings when comparing texts
+ */
+TBool Contains(const MDesCArray& aDesCArray, const TDesC& aText)
+ {
+ TBool ret( EFalse );
+
+ HBufC* text = aText.AllocLC();
+ TPtr textPtr( text->Des() );
+
+ // Strip any directionality markers to get pure text
+ const TUint32 KPbkLeftToRightMarker = 0x200F;
+ const TUint32 KPbkRightToLeftMarker = 0x200E;
+ const TInt markersLength( 2 );
+ TBuf<markersLength> bufMarkers;
+ bufMarkers.Append( KPbkLeftToRightMarker );
+ bufMarkers.Append( KPbkRightToLeftMarker );
+ AknTextUtils::StripCharacters( textPtr, bufMarkers );
+
+ const TInt count = aDesCArray.MdcaCount();
+ for (TInt i=0; i < count && !ret; ++i)
+ {
+ HBufC* groupName = aDesCArray.MdcaPoint(i).AllocL();
+ TPtr groupNamePtr( groupName->Des() );
+ AknTextUtils::StripCharacters( groupNamePtr, bufMarkers );
+ if ( groupNamePtr == textPtr)
+ {
+ ret = ETrue;
+ }
+ delete groupName;
+ }
+ CleanupStack::PopAndDestroy( text );
+ return ret;
+ }
+
+} // namespace
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+inline CPbkGroupNameQueryDlg::CPbkGroupNameQueryDlg
+ (TDes& aDataText,
+ CPbkContactEngine& aEngine) :
+ CAknTextQueryDialog(aDataText),
+ iEngine(aEngine)
+ {
+ }
+
+inline void CPbkGroupNameQueryDlg::ConstructL(TBool aNameGeneration)
+ {
+ // Create group name array
+ iGroupLabelsArray = new(ELeave) CDesCArrayFlat(8);
+
+ CContactIdArray* idArray = iEngine.Database().GetGroupIdListL();
+ if (idArray)
+ {
+ CleanupStack::PushL(idArray);
+ for (TInt i = 0; i < idArray->Count(); ++i)
+ {
+ CContactGroup* group = iEngine.ReadContactGroupL((*idArray)[i]);
+ CleanupStack::PushL(group);
+ iGroupLabelsArray->AppendL(group->GetGroupLabelL());
+ CleanupStack::PopAndDestroy(); // group
+ }
+ CleanupStack::PopAndDestroy(idArray);
+
+ if (aNameGeneration)
+ {
+ UpdateGroupTitleL();
+ }
+ }
+ }
+
+EXPORT_C CPbkGroupNameQueryDlg* CPbkGroupNameQueryDlg::NewL
+ (TDes& aDataText,
+ CPbkContactEngine& aEngine,
+ TBool aNameGeneration /*=ETrue*/)
+ {
+ CPbkGroupNameQueryDlg* self = new(ELeave) CPbkGroupNameQueryDlg(aDataText, aEngine);
+ CleanupStack::PushL(self);
+ self->ConstructL(aNameGeneration);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CPbkGroupNameQueryDlg::~CPbkGroupNameQueryDlg()
+ {
+ // delete data members
+ delete iGroupLabelsArray;
+ }
+
+EXPORT_C TBool CPbkGroupNameQueryDlg::OkToExitL(TInt aButtonId)
+ {
+ TBool result = CAknTextQueryDialog::OkToExitL(aButtonId);
+
+ // if entry with same name - not ok.
+ if (Contains(*iGroupLabelsArray, Text()))
+ {
+ // display information note
+ HBufC* prompt = StringLoader::LoadLC(R_QTN_FLDR_NAME_ALREADY_USED, Text());
+ CAknInformationNote* dlg = new(ELeave) CAknInformationNote(ETrue);
+ dlg->ExecuteLD(*prompt);
+ CleanupStack::PopAndDestroy(); // prompt
+ CAknQueryControl* queryControl = QueryControl();
+ if (queryControl)
+ {
+ CEikEdwin* edwin = static_cast<CEikEdwin*>(queryControl->ControlByLayoutOrNull(EDataLayout));
+ if (edwin)
+ {
+ edwin->SetSelectionL(edwin->TextLength(), 0);
+ }
+ }
+ result = EFalse;
+ }
+
+ return result;
+ }
+
+void CPbkGroupNameQueryDlg::UpdateGroupTitleL()
+ {
+ TBool found = EFalse;
+ for (TInt number = 1; !found; ++number)
+ {
+ HBufC* groupTitle = StringLoader::LoadLC(R_PBK_QTN_FLDR_DEFAULT_GROUP_NAME, number);
+
+ // Convert the digits if necessary
+ TPtr ptr = groupTitle->Des();
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion(ptr);
+
+ if (!Contains(*iGroupLabelsArray, *groupTitle))
+ {
+ Text().Copy(*groupTitle);
+ found = ETrue;
+ }
+ CleanupStack::PopAndDestroy(groupTitle);
+ }
+ }
+
+
+// End of File