diff -r aecbbf00d063 -r d48ab3b357f1 uifw/AvKon/inc/AknSmileyModel.h --- a/uifw/AvKon/inc/AknSmileyModel.h Tue Aug 31 15:28:30 2010 +0300 +++ b/uifw/AvKon/inc/AknSmileyModel.h Wed Sep 01 12:16:19 2010 +0100 @@ -23,7 +23,8 @@ // INCLUDES #include - +#include +#include "AknSmileyUtils.h" #include "AknSmileyImage.h" @@ -33,6 +34,9 @@ //////////////////////////////////////////////////////////////////// const TInt KSmileyNameLength = 8; +typedef TBuf TSmileyText; +typedef RArray RSmileyTextArray; +typedef RArray RSmileyCodeArray; NONSHARABLE_CLASS(TSmileyIconInfo) { @@ -40,72 +44,69 @@ TSmileyIconInfo(); TSmileyIconInfo(const TSmileyIconInfo& aInfo); void Reset(); - - TBuf iName; - TInt iId; - TAknsItemID iSkinItemID; // from skin - TInt iDefaultThumbnailID; // from mif - TInt iDefaultAnimationID; // from mif - }; - -//////////////////////////////////////////////////////////////////// - -class CSmileyIcon; - -class MSmileyIconObserver - { -public: - virtual void ThumbnailLoaded(CSmileyIcon* aSmileyIcon)=0; - virtual void AnimationChanged(CSmileyIcon* aSmileyIcon)=0; + + TInt iIndex; + TAknsItemID iSkinItemID; // from skin + TInt iDefaultStillImageID; // from mif + TInt iDefaultAnimationImageID; // from mif }; //////////////////////////////////////////////////////////////////// -class CSmileyIcon : public CBase, public MSmileyImageObserver +class CSmileyIcon : public CAknSmileyIcon, public MSmileyImageObserver { public: - static CSmileyIcon* NewL(const TSmileyIconInfo& aInfo, MSmileyIconObserver* aObserver); + static CSmileyIcon* NewL(const TSmileyIconInfo& aInfo, MAknSmileyObserver* aObserver); virtual ~CSmileyIcon(); private: - CSmileyIcon(const TSmileyIconInfo& aInfo, MSmileyIconObserver* aObserver); - void ConstructL(); - -public: - const TDesC& Name() const { return iInfo.iName; } - TInt Id() const { return iInfo.iId; } - - TBool ReadyToDraw() const; - const CFbsBitmap* Image() const; - const CFbsBitmap* Mask() const; + CSmileyIcon(MAknSmileyObserver* aObserver); + void ConstructL(const TSmileyIconInfo& aInfo); -public: - void LoadThumbnailL(); - TBool ThumbnailReady() const; - - void PlayAnimationL(TInt aRepeat, TInt aDelay); - void StopAnimation(); - -public: - void SetSize(const TSize& aSize); - const TSize& Size() const; +public: // from AknSmileyIcon + virtual const CFbsBitmap* Image() const; + virtual const CFbsBitmap* Mask() const; + virtual TBool ReadyToDraw() const; + virtual void SetSize(const TSize& aSize); + virtual const TSize& Size() const; + virtual void PlayAnimationL(TInt aRepeat=0, TInt aDelay=0); + virtual void StopAnimation(); private: // from MSmileyImageObserver virtual void BitmapChanged(CSmileyImage* aSmileyImage, CFbsBitmap* aBitmap); + +public: + TInt Index() const; + void LoadStillImageL(TInt aDelay=0); + TBool StillImageIsReadyToDraw() const; + TBool AnimationImageIsReadyToDraw() const; -private: - TBool ShouldShowAnimation() const; + void AddVariant(const TDesC& aText, TChar aBaseCode); + TInt VariantCount() const; + const TDesC& Text(TInt aVariant=0) const; + TChar Code(TInt aVariant=0) const; private: - const TSmileyIconInfo iInfo; - MSmileyIconObserver* iSmileyIconObserver; - - CSmileyImage* iThumbnailImage; + MAknSmileyObserver* iSmileyIconObserver; + TInt iIndex; + CSmileyImage* iStillImage; CSmileyImage* iAnimationImage; - + RSmileyTextArray iTextArray; + RSmileyCodeArray iCodeArray; }; typedef RArray RSmileyIconPtrArray; +NONSHARABLE_CLASS(TSmileyCodeIndex) + { +public: + TSmileyCodeIndex(CSmileyIcon* aSmileyIcon, TInt aVariant=0) : iSmileyIcon(aSmileyIcon), iVariant(aVariant) {} + CSmileyIcon* Smiley() const { return iSmileyIcon; } + const TDesC& Text() const { return iSmileyIcon->Text(iVariant); } +private: + CSmileyIcon* iSmileyIcon; + TInt iVariant; + }; +typedef RArray RSmileyCodeIndexArray; //////////////////////////////////////////////////////////////////// @@ -122,44 +123,82 @@ void DoNextTaskL(); private: - RSmileyIconPtrArray iTaskArray; - TBool iIsLoading; + RSmileyIconPtrArray iLoadingTaskArray; }; //////////////////////////////////////////////////////////////////// -class CSmileyModel : public CBase, public MSmileyIconObserver +class CSmileyTextTreeNode; + +class CSmileyModel : public CBase, public MAknSmileyObserver { public: - CSmileyModel(MSmileyIconObserver* aObserver); - ~CSmileyModel(); + CSmileyModel(MAknSmileyObserver* aObserver); + virtual ~CSmileyModel(); public: void LoadResourceL(); void ReleaseResource(); - void LoadThumbnailAsyn(TInt aIndex); - void SetSize(const TSize& aSize); public: - enum TIconId - { - EIconSwitchToSmiley = 0, - EIconSwitchToSct, - EIconSmiley - }; + TInt ConvertCodesToTextL(TDes& aText); + TInt ConvertTextToCodesL(TDes& aText); + const TDesC& Text(TChar aCode) const; + TBool IsSmiley(TChar aCode) const; + +public: + void SetSize(const TSize& aSize); + void SetSizeByFont(const CFont* aFont); + +public: + void DrawText(CWindowGc& aGc, const TDesC& aText, const CFont* aFont, const TPoint& aPosition) const; + void DrawText(CWindowGc& aGc, const TDesC& aText, const TAknLayoutText& aLayout, TBool aUseLogicalToVisualConversion=EFalse) const; + void DrawText(CWindowGc& aGc, const TDesC& aText, const CFont* aFont, const TRect& aBox, TInt aBaselineOffset, + CGraphicsContext::TTextAlign aAlignment=CGraphicsContext::ELeft, TInt aLeftMargin=0) const; - CSmileyIcon* operator[](TInt aIndex) const; +private: + void DrawText(CWindowGc& aGc, const TDesC& aText, const CFont* aFont, const TRect& aBox, const TPoint& aOffset) const; + +public: TInt Count() const; + CAknSmileyIcon* Smiley(TChar aCode) const; + CAknSmileyIcon* operator[](TInt aIndex) const; private: // from MSmileyIconObserver - virtual void ThumbnailLoaded(CSmileyIcon* aSmileyIcon); - virtual void AnimationChanged(CSmileyIcon* aSmileyIcon); + virtual void SmileyStillImageLoaded(CAknSmileyIcon* aSmileyIcon); + virtual void SmileyAnimationChanged(CAknSmileyIcon* aSmileyIcon); + +public: // for smiley picker + CAknSmileyIcon* SwitchToSmileyIcon() const; + CAknSmileyIcon* SwitchToSctIcon() const; + TChar SwitchToSmileyCode() const; + TChar SwitchToSctCode() const; + + TChar SmileyCode(TInt aIndex, TInt aVariant=0) const; + TChar SmileyCode(const CAknSmileyIcon* aSmileyIcon) const; + + void LoadStillImagesL(const TDesC& aText); + void PlayAnimationL(const TDesC& aText, TInt aRepeat=0, TInt aDelay=0); + void StopAnimation(const TDesC& aText); + +private: + void LoadStillImageL(TChar aChar); + void PlayAnimationL(TChar aChar, TInt aRepeat=0, TInt aDelay=0); + void StopAnimation(TChar aChar); private: - MSmileyIconObserver* iSmileyIconObserver; + const TDesC& Text(TInt aIndex, TInt aVariant=0) const; + TInt ArrayCount() const; + +private: + MAknSmileyObserver* iSmileyIconObserver; + CSmileyTnumbnailAsynLoader iSmileyLoader; RSmileyIconPtrArray iSmileyIconArray; - CSmileyTnumbnailAsynLoader iSmileyThumbnailLoader; + RSmileyCodeIndexArray iSmileyCodeIndexArray; + + CSmileyTextTreeNode* iTextSearchTree; + TBuf<1024*2> iConvertBuffer; };