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 } |