diff -r 1fc85118c3ae -r 870918037e16 landmarksui/uicontrols/src/CLmkEditorFieldArray.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/landmarksui/uicontrols/src/CLmkEditorFieldArray.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,382 @@ +/* +* 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: LandmarksUi Content File - +* Methods for Landmark editor field array. +* +*/ + + + + + + + +// INCLUDE FILES +#include "CLmkEditorFieldArray.h" // this class +#include "MLmkEditorUiBuilder.h" +#include "MLmkEditorField.h" +#include "LmkEditorFieldFactory.h" +#include "CLmkFields.h" +#include "landmarks.hrh" +#include "CLmkUiUtils.h" +#include +#include +// Code added +#include +#include + +// CONSTANTS +/// Unnamed namespace for local definitions +namespace { +const TInt KNumberOfFields( 5 ); +} // namespace +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------- +// CLmkEditorFieldArray::CLmkEditorFieldArray +// ---------------------------------------------------- +// +CLmkEditorFieldArray::CLmkEditorFieldArray( CLmkFields& aLmkFields, + MLmkEditorUiBuilder& aUiBuilder ) : + iLmkFields( aLmkFields ), + iUiBuilder( aUiBuilder ), + iFieldArray(KNumberOfFields) + { + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::ConstructL +// ---------------------------------------------------- +// +void CLmkEditorFieldArray::ConstructL() + { + iCategoryFlag = EFalse; // Used for showing categories + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::NewL +// ---------------------------------------------------- +// +CLmkEditorFieldArray* CLmkEditorFieldArray::NewL + ( CLmkFields& aLmkFields, + MLmkEditorUiBuilder& aUiBuilder ) + { + CLmkEditorFieldArray* dlg = new(ELeave) CLmkEditorFieldArray( aLmkFields, + aUiBuilder ); + CleanupStack::PushL( dlg ); + dlg->ConstructL(); + CleanupStack::Pop(); // dlg + return dlg; + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::~CLmkEditorFieldArray +// ---------------------------------------------------- +// +CLmkEditorFieldArray::~CLmkEditorFieldArray() + { + iFieldArray.ResetAndDestroy(); + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::UpdateFieldsL +// ---------------------------------------------------- +// +void CLmkEditorFieldArray::UpdateFieldsL( const TUint16 aFieldType ) + { + TInt count = iFieldArray.Count(); + for ( TInt i=0; i < count; i++ ) + { + if ( ( iFieldArray[i]->LandmarkItemField().FieldType() == + aFieldType ) || ( aFieldType == EAllEditorItems ) ) + { + iFieldArray[i]->UpdateL(); + } + } + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::CreateFieldsFromLmkL +// ---------------------------------------------------- +// +void CLmkEditorFieldArray::CreateFieldsFromLmkL() + { + CArrayPtrFlat& fields = iLmkFields.Fields(); + TInt count = fields.Count(); + + for ( TInt i = 0; i < count; i++ ) + { + MLmkFieldData& lmkItemField = *fields[i]; + TBool tight = ETrue; + if(iUiBuilder.EditMode()) + { + tight = CheckIfFieldIsEmpty(lmkItemField); + } + MLmkEditorField* editorField = NULL; + if( tight && iCategoryFlag && lmkItemField.EditorType() == EListFieldEditor ) + { //if there are + editorField = LmkEditorFieldFactory::CreateFieldL( + lmkItemField, iUiBuilder,iCategoryName); + iCategoryFlag = EFalse; // Safty purpose.... + } + else if(tight) + { + editorField = LmkEditorFieldFactory::CreateFieldL( + lmkItemField, iUiBuilder ); + } + CleanupStack::PushL( editorField ); + if ( editorField ) + { + iFieldArray.AppendL( editorField ); + } + CleanupStack::Pop(); //editorField + } + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::AreAllFieldsEmptyL +// ---------------------------------------------------- +// +TBool CLmkEditorFieldArray::AreAllFieldsEmptyL() const + { + TBool result = ETrue; + TReal localVar; + + const TInt fieldCount = iFieldArray.Count(); + for ( TInt i=0; i < fieldCount; i++ ) + { + switch( iFieldArray[i]->LandmarkItemField().EditorType() ) + { + //case ETextFieldEditor: + case ETextGenericFieldEditor: + case ETextPhoneNumberFieldEditor: + { + HBufC* fieldText = iFieldArray[i]->ControlTextL(); + if ( fieldText && fieldText->Length() > 0 ) + { + //Check if any active character or not + TPtr16 ptr = fieldText->Des(); + ptr.Trim(); + if (ptr.Length() == 0) + { + result = ETrue; + } + else + { + result = EFalse; + } + } + delete fieldText; + break; + } + case ETextUriFieldEditor: + { + HBufC* fieldText = iFieldArray[i]->ControlTextL(); + + if( fieldText && fieldText->Length() > 0 ) + { + //Check if any active character or not + TPtr16 ptr = fieldText->Des(); + ptr.Trim(); + // Checking if the String present is only "http:\\" + // If that is the case then the field is still + // considered empty + if(!CLmkUiUtils::FindIfWebAddrFieldIsEmpty(ptr)) + { + result = EFalse; + } + } + delete fieldText; + break; + } + case EListFieldEditor: + { + if ( iFieldArray[i]->LandmarkItemField().Categories().Count() ) + { + result = EFalse; + } + break; + } + case ENumberFieldEditor: + { + localVar = iFieldArray[i]->FieldValue(); + if (!Math::IsNaN(localVar)) + result = EFalse; + break; + } + + case ECoordinateFieldEditor: + { + localVar = iFieldArray[i]->FieldValue(); + if (!Math::IsNaN(localVar)) + result = EFalse; + break; + } + + + default: + { + break; + } + } + + if ( !result ) + { + break; + } + } + return result; + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::FieldAt +// ---------------------------------------------------- +// +const MLmkEditorField& CLmkEditorFieldArray::FieldAt + ( TInt aFieldIndex ) + { + return *iFieldArray[aFieldIndex]; + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::Find +// ---------------------------------------------------- +// +MLmkEditorField* CLmkEditorFieldArray::Find( TInt aControlId, TInt* aPos, + TInt* aPrevControlId ) const + { + MLmkEditorField* field = NULL; + const TInt count = iFieldArray.Count(); + for (TInt i = 0; i < count; ++i) + { + MLmkEditorField* temp = iFieldArray.At(i); + if (temp && temp->ControlId() == aControlId ) + { + field = temp; + if(aPos) + { + *aPos =i; + } + break; + } + if( (temp && aPrevControlId) && temp->ControlId() < aControlId) + { + *aPrevControlId = temp->ControlId(); + } + } + return field; + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::SaveFieldsL +// ---------------------------------------------------- +// +TBool CLmkEditorFieldArray::SaveFieldsL() + { + TBool result = EFalse; + for ( TInt i(0); i < iFieldArray.Count(); ++i ) + { + if ( iFieldArray[i]->SaveFieldL() ) + { + result = ETrue; + } + } + + iLmkFields.SaveFieldsL(); + return result; + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::SetCategoryName +// ---------------------------------------------------- +// +void CLmkEditorFieldArray::SetCategoryName(const TDesC& aCategoryName) +{ + iCategoryName.Copy(aCategoryName); + iCategoryFlag = ETrue; +} + +// ---------------------------------------------------- +// CLmkEditorFieldArray::SaveFieldsToBufferL +// ---------------------------------------------------- +// +void CLmkEditorFieldArray::SaveFieldsToBufferL() + { + for ( TInt i(0); i < iFieldArray.Count(); ++i ) + { + iFieldArray[i]->SaveFieldL(); + } + } + +// ---------------------------------------------------- +// CLmkEditorFieldArray::GetFieldArray +// ---------------------------------------------------- +// +CArrayPtrFlat& CLmkEditorFieldArray::GetFieldArray() +{ + return iFieldArray; +} + +// ---------------------------------------------------- +// CLmkEditorFieldArray::CheckIfFieldIsEmpty +// ---------------------------------------------------- +// +TBool CLmkEditorFieldArray::CheckIfFieldIsEmpty(MLmkFieldData& a) + { + TBool result = EFalse; + switch( a.EditorType() ) + { + //case ETextFieldEditor: + case ETextGenericFieldEditor: + case ETextPhoneNumberFieldEditor: + case ETextUriFieldEditor: + { + TPtrC buf = a.TextData(); + if ( buf.Length() > 0 ) + { + result = ETrue; + } + break; + } + case EListFieldEditor: + { + RArray& t = a.Categories(); + if ( t.Count() > 0 ) + { + result = ETrue; + } + break; + } + case ENumberFieldEditor: + { + TReal32 y = a.FloatData(); + if(!Math::IsNaN(y)) + { + result = ETrue; + } + break; + } + case ECoordinateFieldEditor: + { + TReal64 z = a.DoubleData(); + if(!Math::IsNaN(z)) + { + result = ETrue; + } + break; + } + } + return result; + } +// End of File