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++; |
277 // --------------------------------------------------------------------------- |
292 // --------------------------------------------------------------------------- |
278 // |
293 // |
279 TInt CSmileyManager::SmileyLength( TInt aDocPos ) |
294 TInt CSmileyManager::SmileyLength( TInt aDocPos ) |
280 { |
295 { |
281 CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( aDocPos ) ); |
296 CSmileyIcon* icon( iIconRecord->SmileyIconAtPos( aDocPos ) ); |
282 if ( icon ) |
297 if ( icon && !icon->IsDisabled() ) |
283 { |
298 { |
284 return icon->SmileyLength(); |
299 return icon->SmileyLength(); |
285 } |
300 } |
286 return 0; |
301 return 0; |
287 } |
302 } |