uifw/AvKon/inc/AknSmileyModel.h
branchRCL_3
changeset 56 d48ab3b357f1
parent 55 aecbbf00d063
child 72 a5e7a4f63858
--- 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 <AknIconObserver.h>
-
+#include <AknsItemID.h>
+#include "AknSmileyUtils.h"
 #include "AknSmileyImage.h"
 
 
@@ -33,6 +34,9 @@
 ////////////////////////////////////////////////////////////////////
 
 const TInt KSmileyNameLength = 8;
+typedef TBuf<KSmileyNameLength> TSmileyText;
+typedef RArray<TSmileyText> RSmileyTextArray;
+typedef RArray<TChar> RSmileyCodeArray;
 
 NONSHARABLE_CLASS(TSmileyIconInfo)
     {
@@ -40,72 +44,69 @@
     TSmileyIconInfo();
     TSmileyIconInfo(const TSmileyIconInfo& aInfo);
     void Reset();
-
-    TBuf<KSmileyNameLength> 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<CSmileyIcon*> 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<TSmileyCodeIndex> 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;
     
     };