diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstui/src/cvimpstuisearchfieldarray.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstui/src/cvimpstuisearchfieldarray.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,373 @@ +/* +* Copyright (c) 2008 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: search fields array implementation. +* +*/ + + +#include "cvimpstuisearchfieldaray.h" + +#include "mvimpstsearchuibuilder.h" +#include "cvimpstuisearchfield.h" + +// System includes +#include +#include +#include +#include +#include +#include "uiservicetabtracer.h" + +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::CVIMPSTUiSearchFieldArray +// -------------------------------------------------------------------------- +// +inline CVIMPSTUiSearchFieldArray::CVIMPSTUiSearchFieldArray(): + iSelectedSearchType( EIMBasicSearch ) + { + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::~CVIMPSTUiSearchFieldArray +// -------------------------------------------------------------------------- +// +CVIMPSTUiSearchFieldArray::~CVIMPSTUiSearchFieldArray() + { + iFieldArray.ResetAndDestroy(); + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::NewL +// -------------------------------------------------------------------------- +// +CVIMPSTUiSearchFieldArray* CVIMPSTUiSearchFieldArray::NewL() + { + CVIMPSTUiSearchFieldArray* self = + new ( ELeave ) CVIMPSTUiSearchFieldArray( ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::ConstructL +// -------------------------------------------------------------------------- +// +inline void CVIMPSTUiSearchFieldArray::ConstructL() + { + + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::CreateFieldsFromContactL +// -------------------------------------------------------------------------- +// +TInt CVIMPSTUiSearchFieldArray::CreateFieldsL( const TDesC& aLebal, + TVIMPSTSearchDataFieldType aFieldDataType , + TIMPSTSearchFieldTypes aFieldType /*= EIMAdvancedSearch*/, + TVIMPSTEnums::TVIMPSTSearchKey aSearchKey/* = EVIMPSTSearchKeyUknown*/ ) + { + TRACER_AUTO; + MVIMPSTUiSearchField* newField = CVIMPSTUiSearchField::NewL( aLebal, aFieldDataType, aFieldType , aSearchKey); + + iFieldArray.Append( newField ); // ownership to array + + return newField->ControlId(); + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::InsertFieldsL +// -------------------------------------------------------------------------- +// +TInt CVIMPSTUiSearchFieldArray::InsertFieldsL(TInt aIndex, const TDesC& aLebal, + TVIMPSTSearchDataFieldType aFieldDataType , + TIMPSTSearchFieldTypes aFieldType /*= EIMAdvancedSearch*/, + TVIMPSTEnums::TVIMPSTSearchKey aSearchKey/* = EVIMPSTSearchKeyUknown*/ ) + { + TRACER_AUTO; + MVIMPSTUiSearchField* newField = CVIMPSTUiSearchField::NewL( aLebal, aFieldDataType, aFieldType, aSearchKey ); + + iFieldArray.InsertL( newField ,aIndex); // ownership to array + + return newField->ControlId(); + } +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::AreAllUiFieldsEmpty +// -------------------------------------------------------------------------- +// +TBool CVIMPSTUiSearchFieldArray::AreAllUiFieldsEmpty() const + { + TRACER_AUTO; + const TInt count = iFieldArray.Count(); + + for(TInt i = 0; i < count; ++i) + { + TPtrC text = iFieldArray[i]->FieldData() ; + if ( text.Length() > 0) + { + return EFalse; + } + + } + return ETrue; + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::AreAllUiControlsEmptyL +// -------------------------------------------------------------------------- +// +TBool CVIMPSTUiSearchFieldArray::AreAllUiControlsEmptyL() const + { + TRACER_AUTO; + const TInt count = iFieldArray.Count(); + + for(TInt i = 0; i < count; ++i) + { + HBufC* text = iFieldArray[i]->ControlTextL() ; + if ( text && text->Length() ) + { + return EFalse; + } + + } + return ETrue; + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::ResetFieldData +// -------------------------------------------------------------------------- +// +void CVIMPSTUiSearchFieldArray::ResetFieldData() + { + TRACER_AUTO; + const TInt count = iFieldArray.Count(); + + for(TInt i = 0; i < count; ++i) + { + TInt len = iFieldArray[i]->FieldData().Length() ; + if ( len > 0) + { + iFieldArray[i]->ResetFieldData(); + } + + } + + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::CreateUiFieldsFromArrayL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiSearchFieldArray::CreateUiFieldsFromArrayL(MVIMPSTSearchUiBuilder& aUiBuilder ) + { + TRACER_AUTO; + iUiBuilder = NULL; + iUiBuilder = &aUiBuilder; + + TInt count = Count(); + + for( TInt i = 0 ; i< count; i++ ) + { + MVIMPSTUiSearchField* field = iFieldArray[i]; + + CreateUiFieldsL( *field ); + + } + } +// -------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::CreateUiFieldsFromArrayL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiSearchFieldArray::CreateUiFieldsL(MVIMPSTUiSearchField& aField ) + { + TRACER_AUTO; + switch( aField.FieldDataType() ) + { + + case EVIMPSTEdwinNumber : + { + // if number field + break; + } + case EVIMPSTEdwinEmail : + { + // if email field + break; + } + + case EVIMPSTEdwinMobile: + { + // if mobile field + break; + } + case EVIMPSTEdwinText : + default: + { + // default field type is text + // Create and insert a line in the dialog + iControl = NULL; + iCaptionedCtrl = NULL; + + iControl = static_cast(iUiBuilder->CreateLineL( aField.FieldLabel(), aField.ControlId(), EEikCtEdwin) ); + + // Control is now owned by the dialog + TInt maxFieldLength = 100 ; + AknEditUtils::ConstructEditingL(iControl, maxFieldLength, + maxFieldLength, EAknEditorTextCase | EAknEditorCharactersUpperCase + | EAknEditorCharactersLowerCase, EAknEditorAlignLeft, + ETrue, ETrue, EFalse); + + iControl->SetAknEditorCase(EAknEditorTextCase); + + // Place cursor to the end of the line + iControl->AddFlagToUserFlags(CEikEdwin::EJustAutoCurEnd); + + HBufC* previousdata = aField.FieldData().AllocLC(); + iControl->SetTextL( previousdata ); + CleanupStack::PopAndDestroy();// previousdata + aField.ResetFieldData(); + + + // CreateTextViewL() is flagged as deprecated but if it is not + // called here the ActivateL() below crashes sometimes. + iControl->CreateTextViewL(); + iCaptionedCtrl = iUiBuilder->LineControl( aField.ControlId() ); + iCaptionedCtrl->SetTakesEnterKey(ETrue); + aField.SetControl( iControl, iCaptionedCtrl ); // onerhip transferd here to field + + aField.ActivateL(); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::SetFocusL +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiSearchFieldArray::SetFocusL(TInt aFieldIndex ) + { + TRACER_AUTO; + if (aFieldIndex >= 0 && aFieldIndex < iFieldArray.Count() && iUiBuilder ) + { + MVIMPSTUiSearchField& field = At( aFieldIndex); + + iUiBuilder->TryChangeFocusL( field.ControlId() ); + } + + } + +// ----------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::GetFirstEnteredFieldDataL +// ----------------------------------------------------------------------------- +// +TPtrC CVIMPSTUiSearchFieldArray::GetFirstEnteredFieldDataL() + { + TRACER_AUTO; + const TInt count = iFieldArray.Count(); + + for(TInt i = 0; i < count; ++i) + { + TPtrC text = iFieldArray[i]->FieldData() ; + if ( text.Length() > 0) + { + return iFieldArray[i]->FieldData(); + } + + } + return KNullDesC(); + } + + +// ----------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::GetSearchKeyDataL +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiSearchFieldArray::GetSearchKeyDataL(RArray& aKeyDataArray ) + { + TRACER_AUTO; + const TInt count = iFieldArray.Count(); + TPtrC dataPtr(KNullDesC ); + for(TInt i = 0; i < count; ++i) + { + MVIMPSTUiSearchField* field = iFieldArray[i] ; + TPtrC text = field->FieldData() ; + if ( text.Length() > 0) + { + if(field->GetSearchKey() != TVIMPSTEnums::EVIMPSTSearchKeyUknown ) + { + TVIMPSTSearchKeyData data = { + field->GetSearchKey(), + KNullDesC(), + text + }; + + aKeyDataArray.Append(data); + } + else + { + TPtrC label = field->FieldLabel() ; + TVIMPSTSearchKeyData data = { + field->GetSearchKey(), + label, + text + }; + aKeyDataArray.Append(data ); + + } + } + + } + + } + + // ----------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::RemoveField +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiSearchFieldArray::RemoveField(TInt aIndex ) + { + iFieldArray.Remove(aIndex); + iFieldArray.Compress(); + } + + // ----------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::InsertField +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiSearchFieldArray::InsertField(MVIMPSTUiSearchField* aField , TInt aIndex ) + { + iFieldArray.Insert(aField ,aIndex); + } + +// ----------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::GetSearchType +// ----------------------------------------------------------------------------- +// +TIMPSTSearchFieldTypes CVIMPSTUiSearchFieldArray::GetSearchType() + { + return iSelectedSearchType; + } + +// ----------------------------------------------------------------------------- +// CVIMPSTUiSearchFieldArray::SetSearchType +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiSearchFieldArray::SetSearchType(TIMPSTSearchFieldTypes aType) + { + iSelectedSearchType = aType; + } + +// End of File