--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/tpushscriptbased/t_utils/ScriptSection.cpp Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,176 @@
+// Copyright (c) 2007-2009 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:
+//
+
+#include "TestScripts.h"
+
+//
+// CScriptSection
+//
+
+CScriptSection::CScriptSection()
+ : CBase()
+ {
+ }
+
+EXPORT_C CScriptSection* CScriptSection::NewLC(const TDesC& aSectionName, CScriptSection& aDefaults)
+ {
+ CScriptSection* self = new (ELeave) CScriptSection();
+ CleanupStack::PushL(self);
+ self->iDefaults = aDefaults.CopyLC();
+ CleanupStack::Pop(self->iDefaults);
+ self->ConstructL(aSectionName);
+ return self;
+ }
+
+EXPORT_C CScriptSection* CScriptSection::NewLC(const TDesC& aSectionName)
+ {
+ CScriptSection* self = new (ELeave) CScriptSection();
+ CleanupStack::PushL(self);
+ self->ConstructL(aSectionName);
+ return self;
+ }
+
+void CScriptSection::ConstructL(const TDesC& aSectionName)
+ {
+ iSectionName = aSectionName.AllocL();
+ iItems = new(ELeave) CArrayPtrFlat<CScriptSectionItem>(1);
+ }
+
+EXPORT_C const TDesC& CScriptSection::ItemValue(const TDesC& aItem, const TDesC& aDefault)
+ {
+ CScriptSectionItem* sectionItem = Item(aItem);
+
+ if (sectionItem != NULL)
+ {
+ TPtrC value(sectionItem->Value());
+
+ if (iDefaults != NULL && (value.CompareF(KDefault1) == 0 || value.CompareF(KDefault2) == 0))
+ {
+ return iDefaults->ItemValue(aItem, aDefault);
+ }
+ else
+ {
+ return sectionItem->Value();
+ }
+ }
+ else if (iDefaults != NULL)
+ {
+ return iDefaults->ItemValue(aItem, aDefault);
+ }
+ else
+ {
+ return aDefault;
+ }
+ }
+
+EXPORT_C TInt CScriptSection::ItemValue(const TDesC& aItem, const TInt aDefault)
+ {
+ const TDesC& value = ItemValue(aItem, KNullDesC);
+
+ if (value.Length() == 0)
+ {
+ if (iDefaults != NULL)
+ return iDefaults->ItemValue(aItem, aDefault);
+ else
+ return aDefault;
+ }
+
+ TLex input(value);
+ TInt ret = aDefault;
+ TInt err = input.Val(ret);
+
+ if (err)
+ {
+ if (iDefaults != NULL)
+ return iDefaults->ItemValue(aItem, aDefault);
+ else
+ return aDefault;
+ }
+
+ return ret;
+ }
+
+EXPORT_C CScriptSectionItem& CScriptSection::AddItemL(const TDesC& aItem, const TDesC& aValue)
+ {
+ CScriptSectionItem* sectionItem = CScriptSectionItem::NewLC(*this, aItem, aValue);
+ iItems->AppendL(sectionItem);
+ CleanupStack::Pop(sectionItem);
+ iLastItem = sectionItem;
+ return *sectionItem;
+ }
+
+EXPORT_C void CScriptSection::AddItemIfNotExistL(const TDesC& aItem, const TDesC& aValue)
+ {
+ CScriptSectionItem* sectionItem = Item(aItem);
+
+ if (sectionItem == NULL)
+ {
+ AddItemL(aItem, aValue);
+ }
+ }
+
+EXPORT_C CScriptSectionItem& CScriptSection::ReplaceItemL(const TDesC& aItem, const TDesC& aValue)
+ {
+ DeleteItemsL(aItem);
+ return AddItemL(aItem, aValue);
+ }
+
+EXPORT_C void CScriptSection::DeleteItemsL(const TDesC& aItem)
+ {
+ iLastItem = NULL;
+ TInt count = iItems->Count();
+
+ //Remove existing CScriptSectionItems that have the same item name
+ while (count--)
+ {
+ CScriptSectionItem* sectionItem = iItems->At(count);
+
+ if (sectionItem->Item().CompareF(aItem) == 0)
+ {
+ delete sectionItem;
+ iItems->Delete(count);
+ }
+ }
+ }
+
+
+EXPORT_C CScriptSection::~CScriptSection()
+ {
+ if (iItems)
+ iItems->ResetAndDestroy();
+
+ delete iItems;
+ delete iSectionName;
+ delete iDefaults;
+ }
+
+EXPORT_C CScriptSection* CScriptSection::CopyLC()
+ {
+ TInt count = iItems->Count();
+ CScriptSection* copy = NULL;
+
+ if (iDefaults != NULL)
+ copy = CScriptSection::NewLC(SectionName(), *iDefaults);
+ else
+ copy = CScriptSection::NewLC(SectionName());
+
+ while (count--)
+ {
+ copy->iItems->AppendL(Item(count).CopyLC());
+ CleanupStack::Pop();
+ }
+
+ return copy;
+ }