phonebookui/Phonebook/View/src/CPbkSetToneToGroup.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/CPbkSetToneToGroup.cpp	Tue Feb 02 10:12:17 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: 
+*       Provides methods for Assign ringing tone to group members process.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkSetToneToGroup.h"
+#include <cntdef.h>
+#include <cntitem.h>
+#include <CPbkContactEngine.h>
+#include <CPbkContactItem.h>
+#include <TPbkContactItemField.h>
+#include <CPbkFieldInfo.h>
+#include <CPbkFieldsInfo.h>
+
+#include <PbkDebug.h>
+
+// LOCAL CONSTANTS AND MACROS
+
+/// The interval to test DB compression
+const TInt KCompressionInterval = 10;
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+inline TBool CPbkSetToneToGroup::MoreContactsToSet() const
+    {
+    return (iContacts && iContacts->Count() > 0);
+    }
+
+inline void CPbkSetToneToGroup::Cancel()
+    {
+    delete iContacts;
+    iContacts = NULL;
+    }
+
+inline CPbkSetToneToGroup::CPbkSetToneToGroup
+        (CPbkContactEngine& aEngine) :
+    iEngine(aEngine)
+    {
+    PBK_DEBUG_PRINT
+        (PBK_DEBUG_STRING("CPbkSetToneToGroup::CPbkSetToneToGroup(0x%x)"), 
+        this);
+    }
+
+inline void CPbkSetToneToGroup::ConstructL
+        (const CContactIdArray& aContacts,
+        const TDesC& aRingingToneName)
+    {
+    iRingingToneFile = aRingingToneName.AllocL();
+    iTotalContactsToSet = aContacts.Count();
+    iContacts = CContactIdArray::NewL(&aContacts);
+    iContacts->ReverseOrder();
+    }
+
+EXPORT_C CPbkSetToneToGroup* CPbkSetToneToGroup::NewLC
+        (CPbkContactEngine& aEngine,
+        const CContactIdArray& aContacts,
+        const TDesC& aRingingToneName)
+    {
+    CPbkSetToneToGroup* self = new(ELeave) CPbkSetToneToGroup(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL(aContacts, aRingingToneName);
+    return self;
+    }
+
+CPbkSetToneToGroup::~CPbkSetToneToGroup()
+    {
+    PBK_DEBUG_PRINT
+        (PBK_DEBUG_STRING("CPbkSetToneToGroup::~CPbkSetToneToGroup(0x%x)"), 
+        this);
+
+    delete iContacts;
+    delete iRingingToneFile;
+    }
+
+EXPORT_C const TDesC& CPbkSetToneToGroup::RingingToneFile() const
+    {
+    return *iRingingToneFile;
+    }
+
+void CPbkSetToneToGroup::StepL()
+    {
+    PBK_DEBUG_PRINT
+        (PBK_DEBUG_STRING("CPbkSetToneToGroup::StepL()"), 
+        this);
+    
+    if (iSetCount % KCompressionInterval == 0)
+        {
+        iEngine.CheckFileSystemSpaceAndCompressL();
+        }
+
+    if (MoreContactsToSet())
+        {
+        const TInt index = iContacts->Count() - 1;
+        const TContactItemId id = (*iContacts)[index];
+
+        CPbkContactItem* item = iEngine.OpenContactLCX(id);
+        SetRingingToneL(*item);
+        iEngine.CommitContactL(*item);
+        CleanupStack::PopAndDestroy(2); // item, lock
+
+        iContacts->Remove(index);
+        ++iSetCount;
+
+        PBK_DEBUG_PRINT(PBK_DEBUG_STRING("    set contact %d"), id);
+        }
+    }
+
+TInt CPbkSetToneToGroup::TotalNumberOfSteps()
+    {
+    return iTotalContactsToSet;
+    }
+
+TBool CPbkSetToneToGroup::IsProcessDone() const
+    {
+    return !MoreContactsToSet();
+    }
+
+void CPbkSetToneToGroup::ProcessFinished()
+    {
+    PBK_DEBUG_PRINT
+        (PBK_DEBUG_STRING("CPbkSetToneToGroup::ProcessFinished()"), 
+        this);
+
+    Cancel();
+    }
+
+TInt CPbkSetToneToGroup::HandleStepError(TInt aError)
+    {
+    PBK_DEBUG_PRINT(PBK_DEBUG_STRING("CPbkSetToneToGroup::HandleStepError(%d)"), aError);
+
+    if (aError != KErrNone)
+        {
+        Cancel();
+        }
+
+    return aError;
+    }
+
+void CPbkSetToneToGroup::ProcessCanceled()
+    {
+    PBK_DEBUG_PRINT
+        (PBK_DEBUG_STRING("CPbkSetToneToGroup::ProcessCanceled()"), 
+        this);
+
+    Cancel();
+    }
+
+void CPbkSetToneToGroup::SetRingingToneL
+        (CPbkContactItem& aItem)
+    {
+    TPbkContactItemField* field = aItem.FindField(EPbkFieldIdPersonalRingingToneIndication);
+
+    if (iRingingToneFile->Compare(KNullDesC) == 0)
+        {
+        // remove ringing tone field
+        if (field)
+            {
+            aItem.RemoveField(aItem.FindFieldIndex(*field));
+            }
+        }
+    else
+        {
+        // ringing tone selected
+        if (field)
+            {
+            field->TextStorage()->SetTextL(*iRingingToneFile);
+            }
+        else
+            {
+            // create ringing tone field
+            CPbkFieldInfo* fieldInfo = iEngine.FieldsInfo().Find(EPbkFieldIdPersonalRingingToneIndication);
+            TPbkContactItemField& newField = aItem.AddFieldL(*fieldInfo);
+            newField.TextStorage()->SetTextL(*iRingingToneFile);
+            }
+        }
+    }
+
+//  End of File