diff -r 8ca85d2f0db7 -r aabf2c525e0f uifw/AvKon/inc/AknSmileyModel.h --- a/uifw/AvKon/inc/AknSmileyModel.h Fri Feb 19 23:04:46 2010 +0200 +++ b/uifw/AvKon/inc/AknSmileyModel.h Fri Mar 12 15:43:43 2010 +0200 @@ -23,7 +23,8 @@ // INCLUDES #include - +#include +#include "AknSmileyUtils.h" #include "AknSmileyImage.h" @@ -33,6 +34,8 @@ //////////////////////////////////////////////////////////////////// const TInt KSmileyNameLength = 8; +typedef TBuf TSmileyText; +typedef RArray RSmileyTextArray; NONSHARABLE_CLASS(TSmileyIconInfo) { @@ -40,69 +43,53 @@ 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 AddText(const TDesC& aText); + const TDesC& Text(TInt aVariate=0) const; + TInt TextVariate() const; private: - const TSmileyIconInfo iInfo; - MSmileyIconObserver* iSmileyIconObserver; - - CSmileyImage* iThumbnailImage; + MAknSmileyObserver* iSmileyIconObserver; + TInt iIndex; + CSmileyImage* iStillImage; CSmileyImage* iAnimationImage; - + RSmileyTextArray iTextArray; }; typedef RArray RSmileyIconPtrArray; @@ -122,44 +109,77 @@ 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 aVariate=0) const; + TChar SmileyCode(CAknSmileyIcon* aSmileyIcon) const; + void LoadStillImagesL(const TDesC& aText); + void LoadStillImageL(TChar aChar); private: - MSmileyIconObserver* iSmileyIconObserver; + const TDesC& Text(TInt aIndex, TInt aVariate=0) const; + TInt ArrayCount() const; + TChar EncodeSmileyCode(TInt aIndex, TInt aVariate) const; + TBool DecodeSmileyCode(TChar aCode, TInt& aIndex, TInt& aVariate) const; + +private: + MAknSmileyObserver* iSmileyIconObserver; + CSmileyTnumbnailAsynLoader iSmileyLoader; RSmileyIconPtrArray iSmileyIconArray; - CSmileyTnumbnailAsynLoader iSmileyThumbnailLoader; + TUint iBaseCode; + + CSmileyTextTreeNode* iTextSearchTree; + TBuf<1024*2> iConvertBuffer; };