emailuis/uicomponents/src/fssmileydictionary.cpp
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/src/fssmileydictionary.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 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: This file implements class CFsSmileyDictionary.
+*
+*/
+#include "emailtrace.h"
+#include "fssmileydictionary.h"
+
+EXPORT_C CFsSmileyDictionary* CFsSmileyDictionary::NewL()
+    {
+    FUNC_LOG;
+    CFsSmileyDictionary* self = new(ELeave)CFsSmileyDictionary();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+EXPORT_C CFsSmileyDictionary::~CFsSmileyDictionary()
+    {
+    FUNC_LOG;
+    for(int i = 0 ; i < iSmileysDictionary.Count() ; ++i)
+        {
+        TSmiley *smiley = iSmileysDictionary[i];
+        delete smiley;
+        }
+      
+    delete []iResults;
+    iSmileysDictionary.Close();    
+    }
+
+void CFsSmileyDictionary::AddNewSmileyL(TSmiley* aSmiley)
+    {
+    FUNC_LOG;
+    iSmileysDictionary.AppendL(aSmiley);
+    if(aSmiley->iText->Length() > iLongestSmiley)
+        {
+        iLongestSmiley = aSmiley->iText->Length();
+        }
+        
+    iEndIndex = iSmileysDictionary.Count();
+    }   
+    
+EXPORT_C void CFsSmileyDictionary::AddNewSmileyL(
+        const TDesC& aText, 
+        TFileName aFileName)
+    {
+    FUNC_LOG;
+    TSmiley* smiley = new(ELeave)TSmiley;
+    
+    smiley->iText = aText.AllocL();
+    smiley->iFileName = aFileName;
+    
+    iSmileysDictionary.AppendL(smiley);
+    if(smiley->iText->Length() > iLongestSmiley)
+        {
+        iLongestSmiley = smiley->iText->Length();
+        }
+        
+    iEndIndex = iSmileysDictionary.Count();
+    }
+
+TBool CFsSmileyDictionary::CheckDictionaryL(TBuf<1> someCharacter) 
+    {
+    FUNC_LOG;
+    TBool retVal = ETrue;
+    TInt newEndPosition = 0;
+    
+    //poprzednia litera nie byla smileyem
+    if( -1 == iPositionOfCheckingLetter )
+        {
+        ResetL();
+        iPositionOfCheckingLetter = 0;
+        }
+    
+    for(int i = 0 ; i < iEndIndex ; ++i)
+        {
+        TSmiley* smiley = iSmileysDictionary[iResults[i]];
+        
+        if(smiley->iText->Length() > iPositionOfCheckingLetter 
+                && 0 == someCharacter.Mid(0, 1)
+                  .Compare(smiley->iText->Mid(iPositionOfCheckingLetter, 1)))
+            {
+            iResults[newEndPosition++] = iResults[i];
+            }
+        }
+    
+    if(0 == newEndPosition)
+        {
+        retVal = EFalse;
+        
+        //sprawdzic co sie dzialo
+        if(0 == iPositionOfCheckingLetter)
+            {
+            //ani jedna literka nie przeszla
+            }
+        else
+            {
+            //jakies literki przeszly  
+            for(int i = 0 ; i < iEndIndex ; ++i)
+                {
+                TSmiley* smiley = iSmileysDictionary[iResults[i]];
+                
+                if(smiley->iText->Length() == iPositionOfCheckingLetter)
+                    {
+                    iSmileyFound = ETrue;
+                    iSmileyIndex = iResults[i];
+                    }
+                }  
+            }
+        iPositionOfCheckingLetter = -1;
+        }
+    else
+        {
+        iEndIndex = newEndPosition; 
+        ++iPositionOfCheckingLetter; 
+        }
+    
+    return retVal;
+    }
+
+TInt CFsSmileyDictionary::GetSmileyLength(TInt aSmileyIndex)
+    {
+    FUNC_LOG;
+    return iSmileysDictionary[aSmileyIndex]->iText->Length();
+    }
+    
+TFileName CFsSmileyDictionary::GetSmileyFileName(TInt aSmileyIndex)
+    {
+    FUNC_LOG;
+    TFileName retVal;
+    if ( aSmileyIndex >= 0 && aSmileyIndex < iSmileysDictionary.Count() )
+        {
+        retVal = iSmileysDictionary[aSmileyIndex]->iFileName;
+        }
+    return retVal; 
+    }
+
+TInt CFsSmileyDictionary::GetSmileyIndex()
+    {
+    FUNC_LOG;
+    return iSmileyIndex;
+    }
+
+TBool CFsSmileyDictionary::IsSmiley()
+    {
+    FUNC_LOG;
+    return iSmileyFound;
+    }
+    
+void CFsSmileyDictionary::ResetL()
+    {
+    FUNC_LOG;
+    if(0 != iSmileysDictionary.Count() && 
+       (!iResults || 
+       iSizeOfResultsTable != iSmileysDictionary.Count()))
+        {
+        delete []iResults;
+        
+        iSizeOfResultsTable = iSmileysDictionary.Count();
+        
+        iResults = new(ELeave)TInt[iSizeOfResultsTable];
+        }
+        
+    for(TInt i = 0 ; i < iSizeOfResultsTable ; ++i)
+        {
+        iResults[i] = i;
+        }
+            
+    iEndIndex = iSizeOfResultsTable;
+    iSmileyFound = EFalse;
+    }
+    
+void CFsSmileyDictionary::ConstructL()
+    {
+    FUNC_LOG;
+    
+    }
+        
+CFsSmileyDictionary::CFsSmileyDictionary():iPositionOfCheckingLetter(-1)
+    {
+    FUNC_LOG;
+        
+    }
+
+