uifw/EikStd/coctlsrc/smileymanager.cpp
branchRCL_3
changeset 56 d48ab3b357f1
parent 55 aecbbf00d063
child 59 978afdc0236f
--- a/uifw/EikStd/coctlsrc/smileymanager.cpp	Tue Aug 31 15:28:30 2010 +0300
+++ b/uifw/EikStd/coctlsrc/smileymanager.cpp	Wed Sep 01 12:16:19 2010 +0100
@@ -115,18 +115,33 @@
             {
             TInt smileyLength( iModel->SmileyStringLength( index ) );
             TInt docPos( aStart + i );
-            CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( docPos ) );
-            if ( !icon || ( icon && !icon->IsDisabled() ) )
+            
+            if( iModel->IsSmileyBySemanticAnalysis( aText.Left( docPos + smileyLength ), 
+				smileyLength ) )
                 {
-                if ( !icon )
+                TText smileyCode( iModel->SmileyCode( index ) );
+                CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( docPos ) );
+                // If icon is existed but smiley codes are different, it means smiely 
+				// string has been changed and editor doesn't know it, so delete old icon 
+				// and create a new one. Otherwise, nothing needs to do since the icon is 
+				// already existed.
+                if ( icon && icon->Code() != smileyCode )
                     {
-                    TText smileyCode( iModel->SmileyCode( index ) );
-                    AddSmileyToRecordL( aText.Mid( i, smileyLength ), docPos, 
-                        smileyCode );
+                    iIconRecord->DeleteIconAtPos( docPos );
+                    icon = NULL;
                     }
-                iModel->ReplaceTextWithCodes( aText, i, index );
-                ret = ETrue;
+                if ( !icon || ( icon && !icon->IsDisabled() ) )
+                    {
+                    if ( !icon )
+                        {                    
+                        AddSmileyToRecordL( aText.Mid( i, smileyLength ), docPos, 
+                            smileyCode );
+                        }
+                    iModel->ReplaceTextWithCodes( aText, i, index );
+                    ret = ETrue;
+                    }
                 }
+
             i += smileyLength;
             }
         else
@@ -179,11 +194,14 @@
         if ( image && aRect.Size() != image->BitmapSize() )
             {
             image->SetBitmapSize( aRect.Size() );
-            if ( icon->IsPlayFinished() )
+            for ( TInt i( 0 ); i < image->RefArrayCount(); i++ )
                 {
-                icon->PlayOneTime();
-                iDrawer->CreateImageL( image );
+                if ( image->RefIcon( i )->IsPlayFinished() )
+                    {
+                    image->RefIcon( i )->PlayOneTime();
+                    }
                 }
+            iDrawer->CreateImageL( image );            
             }
         else if ( !image )
             {
@@ -262,7 +280,7 @@
 TText CSmileyManager::SmileyCodeByPos( TInt aDocPos )
     {
     CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( aDocPos ) );
-    if ( icon )
+    if ( icon && !icon->IsDisabled() )
         {
         return icon->Code();
         }
@@ -270,22 +288,13 @@
     }
 
 // ---------------------------------------------------------------------------
-// CSmileyManager::SetVisibleRange
-// ---------------------------------------------------------------------------
-//
-void CSmileyManager::SetVisibleRange( TInt aDocPos, TInt aLength )
-    {
-    iDrawer->SetVisibleRange( aDocPos, aLength );
-    }
-
-// ---------------------------------------------------------------------------
 // CSmileyManager::TextBlockLength
 // ---------------------------------------------------------------------------
 //
 TInt CSmileyManager::SmileyLength( TInt aDocPos )
     {
     CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( aDocPos ) );
-    if ( icon )
+    if ( icon && !icon->IsDisabled() )
         {
         return icon->SmileyLength();
         }