uifw/EikStd/coctlsrc/smileymanager.cpp
branchRCL_3
changeset 20 d48ab3b357f1
parent 19 aecbbf00d063
child 21 978afdc0236f
equal deleted inserted replaced
19:aecbbf00d063 20:d48ab3b357f1
   113         TInt index( iModel->TryFindMatchNode( aText, i ) );
   113         TInt index( iModel->TryFindMatchNode( aText, i ) );
   114         if ( iModel->IsFinalNode( index ) )
   114         if ( iModel->IsFinalNode( index ) )
   115             {
   115             {
   116             TInt smileyLength( iModel->SmileyStringLength( index ) );
   116             TInt smileyLength( iModel->SmileyStringLength( index ) );
   117             TInt docPos( aStart + i );
   117             TInt docPos( aStart + i );
   118             CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( docPos ) );
   118             
   119             if ( !icon || ( icon && !icon->IsDisabled() ) )
   119             if( iModel->IsSmileyBySemanticAnalysis( aText.Left( docPos + smileyLength ), 
       
   120 				smileyLength ) )
   120                 {
   121                 {
   121                 if ( !icon )
   122                 TText smileyCode( iModel->SmileyCode( index ) );
       
   123                 CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( docPos ) );
       
   124                 // If icon is existed but smiley codes are different, it means smiely 
       
   125 				// string has been changed and editor doesn't know it, so delete old icon 
       
   126 				// and create a new one. Otherwise, nothing needs to do since the icon is 
       
   127 				// already existed.
       
   128                 if ( icon && icon->Code() != smileyCode )
   122                     {
   129                     {
   123                     TText smileyCode( iModel->SmileyCode( index ) );
   130                     iIconRecord->DeleteIconAtPos( docPos );
   124                     AddSmileyToRecordL( aText.Mid( i, smileyLength ), docPos, 
   131                     icon = NULL;
   125                         smileyCode );
       
   126                     }
   132                     }
   127                 iModel->ReplaceTextWithCodes( aText, i, index );
   133                 if ( !icon || ( icon && !icon->IsDisabled() ) )
   128                 ret = ETrue;
   134                     {
       
   135                     if ( !icon )
       
   136                         {                    
       
   137                         AddSmileyToRecordL( aText.Mid( i, smileyLength ), docPos, 
       
   138                             smileyCode );
       
   139                         }
       
   140                     iModel->ReplaceTextWithCodes( aText, i, index );
       
   141                     ret = ETrue;
       
   142                     }
   129                 }
   143                 }
       
   144 
   130             i += smileyLength;
   145             i += smileyLength;
   131             }
   146             }
   132         else
   147         else
   133             {
   148             {
   134             i++;
   149             i++;
   177         icon->SetRect( aRect );
   192         icon->SetRect( aRect );
   178         CSmileyImageData* image( icon->ImageData() );
   193         CSmileyImageData* image( icon->ImageData() );
   179         if ( image && aRect.Size() != image->BitmapSize() )
   194         if ( image && aRect.Size() != image->BitmapSize() )
   180             {
   195             {
   181             image->SetBitmapSize( aRect.Size() );
   196             image->SetBitmapSize( aRect.Size() );
   182             if ( icon->IsPlayFinished() )
   197             for ( TInt i( 0 ); i < image->RefArrayCount(); i++ )
   183                 {
   198                 {
   184                 icon->PlayOneTime();
   199                 if ( image->RefIcon( i )->IsPlayFinished() )
   185                 iDrawer->CreateImageL( image );
   200                     {
       
   201                     image->RefIcon( i )->PlayOneTime();
       
   202                     }
   186                 }
   203                 }
       
   204             iDrawer->CreateImageL( image );            
   187             }
   205             }
   188         else if ( !image )
   206         else if ( !image )
   189             {
   207             {
   190             iDrawer->CreateImageByIconL( icon );
   208             iDrawer->CreateImageByIconL( icon );
   191             }
   209             }
   260 // ---------------------------------------------------------------------------
   278 // ---------------------------------------------------------------------------
   261 //
   279 //
   262 TText CSmileyManager::SmileyCodeByPos( TInt aDocPos )
   280 TText CSmileyManager::SmileyCodeByPos( TInt aDocPos )
   263     {
   281     {
   264     CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( aDocPos ) );
   282     CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( aDocPos ) );
   265     if ( icon )
   283     if ( icon && !icon->IsDisabled() )
   266         {
   284         {
   267         return icon->Code();
   285         return icon->Code();
   268         }
   286         }
   269     return 0;
   287     return 0;
   270     }
   288     }
   271 
   289 
   272 // ---------------------------------------------------------------------------
   290 // ---------------------------------------------------------------------------
   273 // CSmileyManager::SetVisibleRange
       
   274 // ---------------------------------------------------------------------------
       
   275 //
       
   276 void CSmileyManager::SetVisibleRange( TInt aDocPos, TInt aLength )
       
   277     {
       
   278     iDrawer->SetVisibleRange( aDocPos, aLength );
       
   279     }
       
   280 
       
   281 // ---------------------------------------------------------------------------
       
   282 // CSmileyManager::TextBlockLength
   291 // CSmileyManager::TextBlockLength
   283 // ---------------------------------------------------------------------------
   292 // ---------------------------------------------------------------------------
   284 //
   293 //
   285 TInt CSmileyManager::SmileyLength( TInt aDocPos )
   294 TInt CSmileyManager::SmileyLength( TInt aDocPos )
   286     {
   295     {
   287     CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( aDocPos ) );
   296     CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( aDocPos ) );
   288     if ( icon )
   297     if ( icon && !icon->IsDisabled() )
   289         {
   298         {
   290         return icon->SmileyLength();
   299         return icon->SmileyLength();
   291         }
   300         }
   292     return 0;
   301     return 0;
   293     }
   302     }