--- /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 <s32mem.h>
+#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);
+ }
+}
+