diff -r fcdfafb36fe7 -r aecbbf00d063 uifw/AvKon/src/AknSmileyModel.cpp --- a/uifw/AvKon/src/AknSmileyModel.cpp Thu Aug 19 10:11:06 2010 +0300 +++ b/uifw/AvKon/src/AknSmileyModel.cpp Tue Aug 31 15:28:30 2010 +0300 @@ -15,6 +15,7 @@ * */ + #include #include #include @@ -22,15 +23,12 @@ #include #include -#include -#include - #include #include #include "AknSmileyModel.h" #include "AknSmileyImage.h" -#include "akntrace.h" + /////////////////////////////////////////////////////////////////////////////////////////////// // TSmileyIconInfo @@ -42,17 +40,21 @@ } TSmileyIconInfo::TSmileyIconInfo(const TSmileyIconInfo& aInfo) : +iName(aInfo.iName), +iId(aInfo.iId), iSkinItemID(aInfo.iSkinItemID), -iDefaultStillImageID(aInfo.iDefaultStillImageID), -iDefaultAnimationImageID(aInfo.iDefaultAnimationImageID) +iDefaultThumbnailID(aInfo.iDefaultThumbnailID), +iDefaultAnimationID(aInfo.iDefaultAnimationID) { } void TSmileyIconInfo::Reset() { + iName.Zero(); + iId = 0; iSkinItemID.Set(0, 0); - iDefaultStillImageID = 0; - iDefaultAnimationImageID = 0; + iDefaultThumbnailID = 0; + iDefaultAnimationID = 0; } @@ -61,84 +63,76 @@ // CSmileyIcon /////////////////////////////////////////////////////////////////////////////////////////////// -CSmileyIcon* CSmileyIcon::NewL(const TSmileyIconInfo& aInfo, MAknSmileyObserver* aObserver) +CSmileyIcon* CSmileyIcon::NewL(const TSmileyIconInfo& aInfo, MSmileyIconObserver* aObserver) { - CSmileyIcon* self = new (ELeave) CSmileyIcon(aObserver); + CSmileyIcon* self = new (ELeave) CSmileyIcon(aInfo, aObserver); CleanupStack::PushL(self); - self->ConstructL(aInfo); + self->ConstructL(); CleanupStack::Pop(); // self; return self; } -void CSmileyIcon::ConstructL(const TSmileyIconInfo& aInfo) +void CSmileyIcon::ConstructL() { - iIndex = aInfo.iIndex; - - iStillImage = CSmileyImage::NewL(aInfo.iSkinItemID, aInfo.iDefaultStillImageID, EFalse, this); + iThumbnailImage = CSmileyImage::NewL(iInfo.iSkinItemID, iInfo.iDefaultThumbnailID, FALSE, this); - if(aInfo.iSkinItemID.iMinor==0 && aInfo.iDefaultAnimationImageID>0) + if(iInfo.iSkinItemID.iMinor==0 && iInfo.iDefaultAnimationID>0) { - TAknsItemID nullID; - nullID.Set(0, 0); - iAnimationImage = CSmileyImage::NewL(nullID, aInfo.iDefaultAnimationImageID, ETrue, this); + iAnimationImage = CSmileyImage::NewL(iInfo.iSkinItemID, iInfo.iDefaultAnimationID, TRUE, this); } } -CSmileyIcon::CSmileyIcon(MAknSmileyObserver* aObserver) : iSmileyIconObserver(aObserver) +CSmileyIcon::CSmileyIcon(const TSmileyIconInfo& aInfo, MSmileyIconObserver* aObserver) : +iInfo(aInfo), iSmileyIconObserver(aObserver) { } CSmileyIcon::~CSmileyIcon() { - delete iStillImage; + delete iThumbnailImage; delete iAnimationImage; + } + +TBool CSmileyIcon::ReadyToDraw() const + { + TBool thumbnailCanDraw = iThumbnailImage->ReadyToDraw(); + TBool animationCanDraw = iAnimationImage ? iAnimationImage->ReadyToDraw() : FALSE; - iTextArray.Close(); - iCodeArray.Close(); + return (thumbnailCanDraw || animationCanDraw); } const CFbsBitmap* CSmileyIcon::Image() const { - if(AnimationImageIsReadyToDraw()) + if(ShouldShowAnimation()) { return iAnimationImage->Image(); } else { - return iStillImage->Image(); + return iThumbnailImage->Image(); } } const CFbsBitmap* CSmileyIcon::Mask() const { - if(AnimationImageIsReadyToDraw()) + if(ShouldShowAnimation()) { return iAnimationImage->Mask(); } else { - return iStillImage->Mask(); + return iThumbnailImage->Mask(); } } -TBool CSmileyIcon::ReadyToDraw() const +void CSmileyIcon::LoadThumbnailL() { - return StillImageIsReadyToDraw() || AnimationImageIsReadyToDraw(); + iThumbnailImage->LoadL(); } -void CSmileyIcon::SetSize(const TSize& aSize) +TBool CSmileyIcon::ThumbnailReady() const { - iStillImage->SetSize(aSize); - - if(iAnimationImage) - { - iAnimationImage->SetSize(aSize); - } - } - -const TSize& CSmileyIcon::Size() const - { - return iStillImage->Size(); + return iThumbnailImage->ReadyToDraw(); } void CSmileyIcon::PlayAnimationL(TInt aRepeat, TInt aDelay) @@ -157,86 +151,38 @@ } } -void CSmileyIcon::BitmapChanged(CSmileyImage* aSmileyImage, CFbsBitmap* /*aBitmap*/) +void CSmileyIcon::SetSize(const TSize& aSize) { - if(aSmileyImage == iStillImage) + iThumbnailImage->SetSize(aSize); + + if(iAnimationImage) { - if(iSmileyIconObserver) iSmileyIconObserver->SmileyStillImageLoaded(this); - } - else - { - if(iSmileyIconObserver) iSmileyIconObserver->SmileyAnimationChanged(this); + iAnimationImage->SetSize(aSize); } } -TInt CSmileyIcon::Index() const +const TSize& CSmileyIcon::Size() const { - return iIndex; + return iThumbnailImage->Size(); } -void CSmileyIcon::LoadStillImageL(TInt aDelay) +void CSmileyIcon::BitmapChanged(CSmileyImage* aSmileyImage, CFbsBitmap* /*aBitmap*/) { - iStillImage->LoadL(0, aDelay); + if(aSmileyImage == iThumbnailImage) + { + if(iSmileyIconObserver) iSmileyIconObserver->ThumbnailLoaded(this); + } + else + { + if(iSmileyIconObserver) iSmileyIconObserver->AnimationChanged(this); + } } -TBool CSmileyIcon::StillImageIsReadyToDraw() const - { - return iStillImage->ReadyToDraw(); - } - -TBool CSmileyIcon::AnimationImageIsReadyToDraw() const +TBool CSmileyIcon::ShouldShowAnimation() const { return (iAnimationImage && iAnimationImage->ReadyToDraw()); } -void CSmileyIcon::AddVariant(const TDesC& aText, TChar aBaseCode) - { - TPtrC ptr(aText); - TUint16 baseCode = aBaseCode; - - while(ptr.Length()) - { - TInt left = ptr.Find(_L(" ")); - TInt right = ptr.Length() - left - 1; - if(left == KErrNotFound) - { - left = ptr.Length(); - right = 0; - } - - iTextArray.Append(ptr.Left(left)); - ptr.Set(ptr.Right(right)); - iCodeArray.Append(baseCode++); - } - } - -TInt CSmileyIcon::VariantCount() const - { - return iTextArray.Count(); - } -const TDesC& CSmileyIcon::Text(TInt aVariant) const - { - if(aVariant>=0 && aVariant=0 && aVariant 0) + TInt count = TaskCount(); + if(count > 0) { - CSmileyIcon* icon = iLoadingTaskArray[0]; - iLoadingTaskArray.Remove(0); + CSmileyIcon* icon = iTaskArray[0]; + iTaskArray.Remove(0); - if(icon->StillImageIsReadyToDraw()) + if(icon->ThumbnailReady()) { DoNextTaskL(); } else { - icon->LoadStillImageL(); + icon->LoadThumbnailL(); + iIsLoading = TRUE; } } - } - - - -/////////////////////////////////////////////////////////////////////////////////////////////// -// CSmileyTextTreeNode -/////////////////////////////////////////////////////////////////////////////////////////////// - -NONSHARABLE_CLASS(CSmileyTextTreeNode) : public CBase - { -public: - CSmileyTextTreeNode(TChar aChar); - ~CSmileyTextTreeNode(); - - TChar Char() const; - - CSmileyTextTreeNode* AddTreeL(const TDesC& aText, TChar aCode); - TInt ChildCount() const; - CSmileyTextTreeNode* Child(TInt aIndex) const; - CSmileyTextTreeNode* Child(TChar aChar) const; - -private: - CSmileyTextTreeNode* AddChildAscendingL(TChar aChar); - -private: - TChar iChar; - - typedef CArrayPtrFlat CSmileyTextTreeNodeArrayPtrFlat; - CSmileyTextTreeNodeArrayPtrFlat* iChildArray; - - }; - - -CSmileyTextTreeNode::CSmileyTextTreeNode(TChar aChar) : iChar(aChar) - { - } - -CSmileyTextTreeNode::~CSmileyTextTreeNode() - { - if(iChildArray) - { - iChildArray->ResetAndDestroy(); - delete iChildArray; - } - } - -TChar CSmileyTextTreeNode::Char() const - { - return iChar; - } - - - -CSmileyTextTreeNode* CSmileyTextTreeNode::AddTreeL(const TDesC& aText, TChar aCode) - { - TInt length = aText.Length(); - if(length > 0) - { - CSmileyTextTreeNode* node = AddChildAscendingL(aText[0]); - return node->AddTreeL(aText.Right(length-1), aCode); - } else { - return AddChildAscendingL(aCode); - } - } - -TInt CSmileyTextTreeNode::ChildCount() const - { - if(iChildArray) - { - return iChildArray->Count(); - } - else - { - return 0; - } - } - -CSmileyTextTreeNode* CSmileyTextTreeNode::Child(TInt aIndex) const - { - if(aIndex>=0 && aIndexAt(aIndex); - } - else - { - return NULL; + iIsLoading = FALSE; } } -CSmileyTextTreeNode* CSmileyTextTreeNode::Child(TChar aChar) const - { - if(iChildArray) - { - const TInt KFirstPos = 0; - const TInt KEndPos = iChildArray->Count() - 1; - if(aCharAt(KFirstPos)->Char() || aChar>iChildArray->At(KEndPos)->Char()) - { - return NULL; - } - for(TInt i=KEndPos; i>=KFirstPos; i--) - { - CSmileyTextTreeNode* node = iChildArray->At(i); - if(node->Char() == aChar) - { - return node; - } - } - } - - return NULL; - } - -CSmileyTextTreeNode* CSmileyTextTreeNode::AddChildAscendingL(TChar aChar) - { - // new - if(!iChildArray) - { - iChildArray = new (ELeave) CSmileyTextTreeNodeArrayPtrFlat(1); - } - - // sequential search - TInt pos = 0; - for(; posCount(); pos++) - { - CSmileyTextTreeNode* node = iChildArray->At(pos); - TChar character = node->Char(); - if(aChar == character) - { - return node; - } - else if(aChar < character) - { - break; - } - } - - CSmileyTextTreeNode* node = new (ELeave) CSmileyTextTreeNode(aChar); - iChildArray->InsertL(pos, node); - return node; - } - /////////////////////////////////////////////////////////////////////////////////////////////// // CSmileyModel /////////////////////////////////////////////////////////////////////////////////////////////// -const TUint16 KBaseCode = 0xf880; -//const TUint16 KBaseCodeOff = 0x7FFF; -_LIT(KPlaceHolder, "\xf880i"); - -CSmileyModel::CSmileyModel(MAknSmileyObserver* aObserver) : iSmileyIconObserver(aObserver) +CSmileyModel::CSmileyModel(MSmileyIconObserver* aObserver) : iSmileyIconObserver(aObserver) { } @@ -454,12 +260,23 @@ ReleaseResource(); iSmileyIconArray.Close(); - iSmileyCodeIndexArray.Close(); } void CSmileyModel::LoadResourceL() { if(Count() > 0) return; + + // append sct & smiley switch icon + { + TSmileyIconInfo info; + info.iSkinItemID = KAknsIIDQgnIndiSwitchSmiley2; + info.iDefaultThumbnailID = EMbmSmileyQgn_indi_switch_smiley2; + iSmileyIconArray.Append(CSmileyIcon::NewL(info, this)); + + info.iSkinItemID = KAknsIIDQgnIndiSwitchSct2; + info.iDefaultThumbnailID = EMbmSmileyQgn_indi_switch_sct2; + iSmileyIconArray.Append(CSmileyIcon::NewL(info, this)); + } // append image resourece TResourceReader reader; @@ -468,16 +285,13 @@ TInt offset = CCoeEnv::Static()->AddResourceFileL(smileyRscName); CCoeEnv::Static()->CreateResourceReaderLC(reader, R_SMILEY_ICONS_INFO); - TUint16 codeRef = KBaseCode; - TInt index = 0; - - iTextSearchTree = new (ELeave) CSmileyTextTreeNode(0); - TInt count(reader.ReadInt16()); - for(TInt i(0); i 0) { - info.iDefaultStillImageID = bmpId2; - info.iDefaultAnimationImageID = bmpId1; + info.iDefaultThumbnailID = bmpId2; + info.iDefaultAnimationID = bmpId1; } else { - info.iDefaultStillImageID = bmpId1; - info.iDefaultAnimationImageID = 0; + info.iDefaultThumbnailID = bmpId1; + info.iDefaultAnimationID = 0; } TBuf<64> smileyName = reader.ReadTPtrC(); // strings - - CSmileyIcon* icon = CSmileyIcon::NewL(info, this); - icon->AddVariant(smileyName, codeRef); - iSmileyIconArray.Append(icon); - - // build text search tree - for(TInt j=0; jVariantCount(); j++) - { - iTextSearchTree->AddTreeL(icon->Text(j), codeRef++); - iSmileyCodeIndexArray.Append(TSmileyCodeIndex(icon,j)); - } + TInt pos = smileyName.Find(_L(" ")); + if(pos > 0) smileyName.SetLength(pos); + info.iName = smileyName; + + iSmileyIconArray.Append(CSmileyIcon::NewL(info, this)); } CCoeEnv::Static()->DeleteResourceFile(offset); CleanupStack::PopAndDestroy(); // reader - - // sct & smiley switch icon - TSmileyIconInfo info; - info.iIndex = index++; - info.iSkinItemID = KAknsIIDQgnIndiSwitchSmiley2; - info.iDefaultStillImageID = EMbmSmileyQgn_indi_switch_smiley2; - CSmileyIcon* switchSmileyIcon = CSmileyIcon::NewL(info, this); - iSmileyIconArray.Append(switchSmileyIcon); - iSmileyCodeIndexArray.Append(TSmileyCodeIndex(switchSmileyIcon)); - - info.iIndex = index++; - info.iSkinItemID = KAknsIIDQgnIndiSwitchSct2; - info.iDefaultStillImageID = EMbmSmileyQgn_indi_switch_sct2; - CSmileyIcon* switchSctIcon = CSmileyIcon::NewL(info,this); - iSmileyIconArray.Append(switchSctIcon); - iSmileyCodeIndexArray.Append(TSmileyCodeIndex(switchSctIcon)); } void CSmileyModel::ReleaseResource() { - if(Count() == 0) return; - // reset array - for(TInt i(0); iChild(character); - if(find) - { - matchedLength++; // character is mathed - - CSmileyTextTreeNode* child = find->Child(0); - TBool notFinished = (child && child->ChildCount()); - if(notFinished) // not ended - { - node = find; // match next - continue; - } - else if(child) // whole combination is matched and ended - { - TChar code = child->Char(); - - // replace with code - iConvertBuffer.SetLength(iConvertBuffer.Length() - matchedLength); - iConvertBuffer.Append(code); - iConvertBuffer.Append('i'); - converted++; // returned value added - // load thumnail - LoadStillImageL(code); - - // restart - matchedLength = 0; - node = iTextSearchTree; - continue; - } - else // in this case matchedLength already increased by 1 - { - matchedLength--; - } - } - - // matching failed - if(matchedLength) - { - // back to the 2nd char - TInt rollBack = matchedLength; - iConvertBuffer.SetLength(iConvertBuffer.Length() - rollBack); - pos -= rollBack; - - // reset matching context - matchedLength = 0; - node = iTextSearchTree; - } - } - - // replace - if(converted) - { - aText.Copy(iConvertBuffer); - } - - _AKNTRACE_FUNC_EXIT; - return converted; - } - -TBool CSmileyModel::IsSmiley(TChar aCode) const - { - TInt smileyCodeIndex = (TUint16)aCode - KBaseCode; - return (smileyCodeIndex>=0 && smileyCodeIndexSize()!=aSize) - { - for(TInt i(0); iSetSize(aSize); - } - } - } - -void CSmileyModel::SetSizeByFont(const CFont* aFont) - { - TSize size(aFont->TextWidthInPixels(KPlaceHolder),aFont->HeightInPixels()); - SetSize(size); - } - -void CSmileyModel::DrawText(CWindowGc& aGc, const TDesC& aText, const CFont* aFont, const TPoint& aPosition) const - { - TPtrC ptr = aText; - TPoint pos = aPosition; - - aGc.UseFont(aFont); - - TBool metSmileyNotReady = EFalse; - - while(ptr.Length()) + for(TInt i(0); i 0) // have text - { - TPtrC txt = ptr.Left(i); - aGc.DrawText(txt, pos); - pos += TPoint(aFont->TextWidthInPixels(txt),0); - - ptr.Set(ptr.Right(ptr.Length()-i)); - i = 0; - } - - if(ptr.Length()) // breaked by smiley code - { - CAknSmileyIcon* icon = Smiley(ptr[i]); - if(icon) - { - TSize size = icon->Size(); - TPoint tl = pos; - tl.iY = tl.iY - (size.iHeight + aFont->HeightInPixels()) / 2; - if(!metSmileyNotReady && icon->ReadyToDraw()) - { - aGc.BitBltMasked(tl, icon->Image(), TRect(size), icon->Mask(), EFalse); - } - else - { - metSmileyNotReady = ETrue; - } - pos += TPoint(aFont->TextWidthInPixels(ptr.Left(2)),0); - } - - ptr.Set(ptr.Right(ptr.Length()-2)); - } + iSmileyIconArray[i]->SetSize(aSize); } } -void CSmileyModel::DrawText(CWindowGc& aGc, const TDesC& aText, const TAknLayoutText& aLayout, TBool aUseLogicalToVisualConversion) const - { - _AKNTRACE_FUNC_ENTER; - // adapter variables - const CFont* font = aLayout.Font(); - TRect textRect = aLayout.TextRect(); - TInt offset = aLayout.BaselineOffset(); - CGraphicsContext::TTextAlign align = aLayout.Align(); - - // belows are all from - // void TAknLayoutText::DrawText(CGraphicsContext& aGc,const TDesC& aText,TBool aUseLogicalToVisualConversion, const TRgb &aColor) const - - __ASSERT_DEBUG(font, Panic(EAknPanicLayoutTextNotCalled)); - - //aGc.UseFont( font ); - //aGc.SetPenColor( aColor ); - if ( aText.Length() ) - { - HBufC* visualBuf = NULL; - TPtrC text( aText ); - - if ( aUseLogicalToVisualConversion ) - { - visualBuf = HBufC::New( aText.Length() + KAknBidiExtraSpacePerLine ); - - // In OOM, logical to visual conversion is not performed... - - if ( visualBuf ) - { - *visualBuf = aText; // copy - TPtr ptr = visualBuf->Des(); - - TInt maxWidth = textRect.Size().iWidth; - // Logical to visual conversion. - AknBidiTextUtils::ConvertToVisualAndClip( - aText, - ptr, - *font, - maxWidth, - maxWidth ); - // for smiley begin - const TInt length = ptr.Length(); - if(length>1 && IsSmiley(ptr[length-2])) - { - if(ptr[length-1] != 'i') - { - // smiley is clipped for visual, del this smiley - ptr.Delete(length-2, 1); - } - } - // for smiley end - - text.Set( ptr ); - } - } - - // Calculate x-offset based on the used alignment - TInt margin = 0; - if ( align != CGraphicsContext::ELeft ) - { - // Measure the full width of the text (ie. what DrawText needs) - TInt textWidth = AknBidiTextUtils::MeasureTextBoundsWidth( *font, text,CFont::TMeasureTextInput::EFVisualOrder ); - - const TInt extraWidth = textRect.Width() - textWidth; - if ( align == CGraphicsContext::ECenter ) - { - margin = extraWidth / 2; - } - else // right aligned - { - margin = extraWidth; - } - } - - // Need to make the drawing rectangle bigger to account for underlines - TRect drawRect(textRect); - TInt height = drawRect.Height(); - // The underline position is not available from the GC. The following code imitates what Symbian CFbsBitGC implements. - // (height-offset) is the part below the baseline. Check if it sufficient - TInt extraHeightForUnderlining = 1 + Max(1, height/10)-(height-offset); - if ( extraHeightForUnderlining > 0 ) - drawRect.iBr.iY += extraHeightForUnderlining; - - // for smiley - //aGc.DrawText( text, drawRect, offset, CGraphicsContext::ELeft, margin ); - DrawText(aGc, text, font, drawRect, offset, CGraphicsContext::ELeft, margin); - - delete visualBuf; - } - - //aGc.DiscardFont(); // Release the font cache - _AKNTRACE_FUNC_EXIT; - } - -void CSmileyModel::DrawText(CWindowGc& aGc, const TDesC& aText, const CFont* aFont, const TRect& aBox, TInt aBaselineOffset, - CGraphicsContext::TTextAlign aAlignment, TInt aLeftMargin) const +CSmileyIcon* CSmileyModel::operator[](TInt aIndex) const { - TInt boxWidth = aBox.Width(); - TInt textWidth = aFont->TextWidthInPixels(aText); - - TPoint offset; - offset.iY = aBaselineOffset; - - switch(aAlignment) - { - case CGraphicsContext::ELeft: - offset.iX = aLeftMargin; - break; - - case CGraphicsContext::ERight: - offset.iX = boxWidth - textWidth - aLeftMargin; - break; - - case CGraphicsContext::ECenter: - offset.iX = (boxWidth - textWidth) / 2; - break; - - default: - break; - } - - DrawText(aGc, aText, aFont, aBox, offset); - } - -void CSmileyModel::DrawText(CWindowGc& aGc, const TDesC& aText, const CFont* aFont, const TRect& aBox, const TPoint& aOffset) const - { - TPtrC ptr = aText; - TPoint offset = aOffset; - - aGc.UseFont(aFont); - - TInt fontH = aFont->FontMaxHeight(); - - TBool metSmileyNotReady = EFalse; - - while(ptr.Length()) - { - TInt i = 0; - for(; i 0) // have text - { - TPtrC txt = ptr.Left(i); - aGc.DrawText(txt, aBox, offset.iY, CGraphicsContext::ELeft, offset.iX); - offset.iX += aFont->TextWidthInPixels(txt); - - ptr.Set(ptr.Right(ptr.Length()-i)); - i = 0; - } - - if(ptr.Length()) // breaked by smiley code - { - CAknSmileyIcon* icon = Smiley(ptr[i]); - if(icon) - { - TSize size = icon->Size(); - TPoint tl = aBox.iTl; - tl.iX += offset.iX; - //tl.iY = tl.iY - size.iHeight/*(size.iHeight + fontH) / 2*/; - TRect imgWindow(tl, size); - imgWindow.Intersection(aBox); - if(!imgWindow.IsEmpty()) - { - TRect innerRect = TRect(imgWindow.iTl-tl,imgWindow.Size()); - if(!metSmileyNotReady && icon->ReadyToDraw()) - { - aGc.BitBltMasked(imgWindow.iTl, icon->Image(), innerRect, icon->Mask(), EFalse); - } - else - { - metSmileyNotReady = ETrue; - } - } - - //offset += TPoint(aFont->TextWidthInPixels(ptr.Left(2)),0); - offset.iX += size.iWidth; - } - - ptr.Set(ptr.Right(ptr.Length()-2)); - } - } - } - -CAknSmileyIcon* CSmileyModel::Smiley(TChar aCode) const - { - if(IsSmiley(aCode)) - { - TInt smileyCodeIndex = (TUint16)aCode - KBaseCode; - return iSmileyCodeIndexArray[smileyCodeIndex].Smiley(); - } - else - { - return NULL; - } - } - -CAknSmileyIcon* CSmileyModel::operator[](TInt aIndex) const - { - if(aIndex>=0 && aIndex=0 && aIndex(iconWrapper); - if(icon) - { - return icon->Code(aVariant); - } - else - { - return 0; - } - } - -TChar CSmileyModel::SmileyCode(const CAknSmileyIcon* aSmileyIcon) const - { - if(aSmileyIcon) - { - const CSmileyIcon* icon = static_cast(aSmileyIcon); - return icon->Code(); - } - else - { - return 0; - } - } - -void CSmileyModel::LoadStillImagesL(const TDesC& aText) - { - for(TInt i(0); i(Smiley(aChar)); - iSmileyLoader.AddTaskL(icon); - } - -void CSmileyModel::PlayAnimationL(TChar aChar, TInt aRepeat, TInt aDelay) - { - CSmileyIcon* icon = static_cast(Smiley(aChar)); - if(icon) icon->PlayAnimationL(aRepeat, aDelay); + if(iSmileyIconObserver) iSmileyIconObserver->ThumbnailLoaded(aSmileyIcon); } -void CSmileyModel::StopAnimation(TChar aChar) - { - CSmileyIcon* icon = static_cast(Smiley(aChar)); - if(icon) icon->StopAnimation(); - } - -const TDesC& CSmileyModel::Text(TInt aIndex, TInt aVariant) const +void CSmileyModel::AnimationChanged(CSmileyIcon* aSmileyIcon) { - CSmileyIcon* icon = static_cast((*this)[aIndex]); - if(icon) - { - return icon->Text(aVariant); - } - else - { - return KNullDesC; - } - } - -TInt CSmileyModel::ArrayCount() const - { - return iSmileyIconArray.Count(); - - - - } - -void CSmileyModel::SmileyStillImageLoaded(CAknSmileyIcon* aSmileyIcon) - { - TRAP_IGNORE(iSmileyLoader.DoNextTaskL()); - - if(iSmileyIconObserver) iSmileyIconObserver->SmileyStillImageLoaded(aSmileyIcon); - } - -void CSmileyModel::SmileyAnimationChanged(CAknSmileyIcon* aSmileyIcon) - { - if(iSmileyIconObserver) iSmileyIconObserver->SmileyAnimationChanged(aSmileyIcon); + if(iSmileyIconObserver) iSmileyIconObserver->AnimationChanged(aSmileyIcon); }