diff -r 000000000000 -r e686773b3f54 predictivesearch/PcsUtils/src/CPsQuery.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/predictivesearch/PcsUtils/src/CPsQuery.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,239 @@ +/* +* Copyright (c) 2007 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: Utility class to hold the search sequence for predictive search. +* +*/ + + +// INCLUDE FILES +#include +#include "CPsQuery.h" +#include "CPsQueryItem.h" +#include "CPcsDebug.h" + +// ============================== MEMBER FUNCTIONS ============================ + + +// ---------------------------------------------------------------------------- +// CPsQuery::NewL +// Two Phase constructor +// ---------------------------------------------------------------------------- +EXPORT_C CPsQuery* CPsQuery::NewL() +{ + CPsQuery* self = new (ELeave) CPsQuery(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + +} + +// ---------------------------------------------------------------------------- +// CPsQuery::CPsQuery +// Default constructor +// ---------------------------------------------------------------------------- +CPsQuery::CPsQuery() +{ +} + +// ---------------------------------------------------------------------------- +// CPsQuery::ConstructL +// Two phase construction +// ---------------------------------------------------------------------------- +void CPsQuery::ConstructL() +{ +} + +// ---------------------------------------------------------------------------- +// CPsQuery::~CPsQuery +// Destructor +// ---------------------------------------------------------------------------- +EXPORT_C CPsQuery::~CPsQuery() +{ + Reset(); +} + +// ---------------------------------------------------------------------------- +// CPsQuery::InsertL +// Add a query item to the search sequence +// ---------------------------------------------------------------------------- +EXPORT_C void CPsQuery::InsertL(const CPsQueryItem& aQueryItem, TInt aIndex) +{ + if( (aIndex >= 0) + && (aIndex <= (iSearchQuery.Count() + 1)) + && (this->Count() < KPsQueryMaxLen) ) + { + iSearchQuery.Insert(&aQueryItem, aIndex); + } +} + +// ---------------------------------------------------------------------------- +// CPsQuery::AppendL +// Appends a query item to the search sequence +// ---------------------------------------------------------------------------- +EXPORT_C void CPsQuery::AppendL(const CPsQueryItem& aQueryItem) +{ + if(this->Count() < KPsQueryMaxLen ) + iSearchQuery.AppendL(&aQueryItem); +} + +// ---------------------------------------------------------------------------- +// CPsQuery::GetItemAtL +// Returns the query item at the specified index +// ---------------------------------------------------------------------------- +EXPORT_C CPsQueryItem& CPsQuery:: GetItemAtL(TInt aIndex) +{ + if ( aIndex < 0 && aIndex >= iSearchQuery.Count()) + { + User::Leave(KErrArgument); + } + + return (*(iSearchQuery[aIndex])); +} + +// ---------------------------------------------------------------------------- +// CPsQuery::QueryAsStringL +// Returns the search sequence +// ---------------------------------------------------------------------------- +EXPORT_C TDesC& CPsQuery:: QueryAsStringLC() +{ + HBufC* query = HBufC::NewLC(KPsQueryMaxLen); + + for(TInt arrayIndex =0 ; arrayIndex < iSearchQuery.Count();arrayIndex++) + { + query->Des().Append((iSearchQuery[arrayIndex])->Character()); + } + + return *query; +} + +// ---------------------------------------------------------------------------- +// CPsQuery::Remove +// Deletes the query item at the specified index +// ---------------------------------------------------------------------------- +EXPORT_C void CPsQuery:: Remove(TInt aIndex) +{ + if (aIndex >= 0 && aIndex <= (iSearchQuery.Count() - 1)) + { + delete iSearchQuery[aIndex]; + iSearchQuery.Remove(aIndex); + } +} + +// ---------------------------------------------------------------------------- +// CPsQuery::Reset +// Deletes the entire search query +// ---------------------------------------------------------------------------- +EXPORT_C void CPsQuery:: Reset() +{ + for ( TInt arrayIndex = 0; arrayIndex < iSearchQuery.Count(); arrayIndex++ ) + { + delete iSearchQuery[arrayIndex]; + } + iSearchQuery.Reset(); +} + +// ---------------------------------------------------------------------------- +// CPsQuery::KeyboardModeL +// Returns the keyboard input mode for the search query +// ---------------------------------------------------------------------------- +EXPORT_C TKeyboardModes CPsQuery:: KeyboardModeL() +{ + TKeyboardModes keyboardMode = EModeUndefined; + + if(iSearchQuery.Count() > 0) + { + keyboardMode = iSearchQuery[0]->Mode(); + for(TInt arrayIndex =1 ; arrayIndex < iSearchQuery.Count() ;arrayIndex++) + { + if(keyboardMode != iSearchQuery[arrayIndex]->Mode()) + { + keyboardMode = EModeUndefined; + break; + } + } + } + + return keyboardMode; +} + +// ---------------------------------------------------------------------------- +// CPsQuery::Count +// Returns the length of the query +// ---------------------------------------------------------------------------- +EXPORT_C TInt CPsQuery:: Count() +{ + return (iSearchQuery.Count()); +} + +// ---------------------------------------------------------------------------- +// Deprecated: Use CPcsDebug::PrintQuery +// CPsQuery::PrintQuery +// Prints the query as array of query items (query items cannot be spaces) +// Used only for debugging +// ---------------------------------------------------------------------------- +EXPORT_C void CPsQuery:: PrintQuery() +{ + PRINT1 ( _L("CPsQuery::PrintQuery: Number of items : %d"), iSearchQuery.Count()); + for(TInt i = 0; i < iSearchQuery.Count(); i++) + { + TUint inputKey = iSearchQuery[i]->Character().GetUpperCase(); + TBuf<2> buffer; + buffer.Format(_L("%c"), inputKey); + switch(iSearchQuery[i]->Mode()) + { + case EItut: + PRINT2 ( _L("Character at index %d: '%S' (ITU-T)"), i, &buffer); + break; + case EQwerty: + PRINT2 ( _L("Character at index %d: '%S' (QWERTY)"), i, &buffer); + break; + default: + PRINT2 ( _L("Character at index %d: '%S' (mode=?)"), i, &buffer); + break; + } + } +} + +// ---------------------------------------------------------------------------- +// CPsQuery::ExternalizeL +// Writes 'this' to aStream +// ---------------------------------------------------------------------------- +EXPORT_C void CPsQuery::ExternalizeL(RWriteStream& aStream) const +{ + aStream.WriteUint8L(iSearchQuery.Count()); // Number of query items + for ( int index = 0; index < iSearchQuery.Count(); index++ ) + { + (iSearchQuery[index])->ExternalizeL(aStream); + } +} + +// ---------------------------------------------------------------------------- +// CPsQuery::InternalizeL +// Initializes 'this' with the contents of aStream +// ---------------------------------------------------------------------------- +EXPORT_C void CPsQuery::InternalizeL(RReadStream& aStream) +{ + // Read number of query items + TInt numQueryItems = aStream.ReadUint8L(); + + // Internalize each item + for ( int index = 0; index < numQueryItems; index++ ) + { + CPsQueryItem *item = CPsQueryItem::NewL(); + item->InternalizeL(aStream); + this->AppendL(*item); + } +} +