uifw/AvKon/inc/AknSmileyModel.h
branchRCL_3
changeset 9 aabf2c525e0f
parent 0 2f259fa3e83a
child 15 08e69e956a8c
equal deleted inserted replaced
4:8ca85d2f0db7 9:aabf2c525e0f
    21 #ifndef AKNSMILEYMODEL_H
    21 #ifndef AKNSMILEYMODEL_H
    22 #define AKNSMILEYMODEL_H
    22 #define AKNSMILEYMODEL_H
    23 
    23 
    24 // INCLUDES
    24 // INCLUDES
    25 #include <AknIconObserver.h>
    25 #include <AknIconObserver.h>
    26 
    26 #include <AknsItemID.h>
       
    27 #include "AknSmileyUtils.h"
    27 #include "AknSmileyImage.h"
    28 #include "AknSmileyImage.h"
    28 
    29 
    29 
    30 
    30 // CLASS DECLARATION
    31 // CLASS DECLARATION
    31 
    32 
    32 
    33 
    33 ////////////////////////////////////////////////////////////////////
    34 ////////////////////////////////////////////////////////////////////
    34 
    35 
    35 const TInt KSmileyNameLength = 8;
    36 const TInt KSmileyNameLength = 8;
       
    37 typedef TBuf<KSmileyNameLength> TSmileyText;
       
    38 typedef RArray<TSmileyText> RSmileyTextArray;
    36 
    39 
    37 NONSHARABLE_CLASS(TSmileyIconInfo)
    40 NONSHARABLE_CLASS(TSmileyIconInfo)
    38     {
    41     {
    39 public:
    42 public:
    40     TSmileyIconInfo();
    43     TSmileyIconInfo();
    41     TSmileyIconInfo(const TSmileyIconInfo& aInfo);
    44     TSmileyIconInfo(const TSmileyIconInfo& aInfo);
    42     void Reset();
    45     void Reset();
    43 
    46     
    44     TBuf<KSmileyNameLength> iName;
    47     TInt iIndex;
    45     TInt iId;
    48     TAknsItemID iSkinItemID;        // from skin
    46     TAknsItemID iSkinItemID;    // from skin
    49     TInt iDefaultStillImageID;      // from mif
    47     TInt iDefaultThumbnailID;   // from mif
    50     TInt iDefaultAnimationImageID;  // from mif
    48     TInt iDefaultAnimationID;   // from mif
       
    49     };
    51     };
    50 
    52 
    51 ////////////////////////////////////////////////////////////////////
    53 ////////////////////////////////////////////////////////////////////
    52 
    54 
    53 class CSmileyIcon;
    55 class CSmileyIcon : public CAknSmileyIcon, public MSmileyImageObserver
    54 
       
    55 class MSmileyIconObserver
       
    56     {
    56     {
    57 public:
    57 public:
    58     virtual void ThumbnailLoaded(CSmileyIcon* aSmileyIcon)=0;
    58     static CSmileyIcon* NewL(const TSmileyIconInfo& aInfo, MAknSmileyObserver* aObserver);
    59     virtual void AnimationChanged(CSmileyIcon* aSmileyIcon)=0;
       
    60     };
       
    61 
       
    62 ////////////////////////////////////////////////////////////////////
       
    63 
       
    64 class CSmileyIcon : public CBase, public MSmileyImageObserver
       
    65     {
       
    66 public:
       
    67     static CSmileyIcon* NewL(const TSmileyIconInfo& aInfo, MSmileyIconObserver* aObserver);
       
    68     virtual ~CSmileyIcon();
    59     virtual ~CSmileyIcon();
    69 
    60 
    70 private:
    61 private:
    71     CSmileyIcon(const TSmileyIconInfo& aInfo, MSmileyIconObserver* aObserver);
    62     CSmileyIcon(MAknSmileyObserver* aObserver);
    72     void ConstructL();
    63     void ConstructL(const TSmileyIconInfo& aInfo);
    73 
    64 
    74 public:
    65 public: // from AknSmileyIcon
    75     const TDesC& Name() const               { return iInfo.iName; }
    66     virtual const CFbsBitmap* Image() const;
    76     TInt Id() const                         { return iInfo.iId; }
    67     virtual const CFbsBitmap* Mask() const;
    77 
    68     virtual TBool ReadyToDraw() const;
    78     TBool ReadyToDraw() const;
    69     virtual void SetSize(const TSize& aSize);
    79     const CFbsBitmap* Image() const;
    70     virtual const TSize& Size() const;
    80     const CFbsBitmap* Mask() const;
    71     virtual void PlayAnimationL(TInt aRepeat=0, TInt aDelay=0);
    81 
    72     virtual void StopAnimation();
    82 public:
       
    83     void LoadThumbnailL();
       
    84     TBool ThumbnailReady() const;
       
    85     
       
    86     void PlayAnimationL(TInt aRepeat, TInt aDelay);
       
    87     void StopAnimation();
       
    88 
       
    89 public:
       
    90     void SetSize(const TSize& aSize);
       
    91     const TSize& Size() const;
       
    92 
    73 
    93 private: // from MSmileyImageObserver
    74 private: // from MSmileyImageObserver
    94     virtual void BitmapChanged(CSmileyImage* aSmileyImage, CFbsBitmap* aBitmap);
    75     virtual void BitmapChanged(CSmileyImage* aSmileyImage, CFbsBitmap* aBitmap);
       
    76     
       
    77 public:
       
    78     TInt Index() const;
       
    79     void LoadStillImageL(TInt aDelay=0);
       
    80     TBool StillImageIsReadyToDraw() const;
       
    81     TBool AnimationImageIsReadyToDraw() const;
       
    82 
       
    83     void AddText(const TDesC& aText);
       
    84     const TDesC& Text(TInt aVariate=0) const;
       
    85     TInt TextVariate() const;
    95 
    86 
    96 private:
    87 private:
    97     TBool ShouldShowAnimation() const;
    88     MAknSmileyObserver*     iSmileyIconObserver;
    98 
    89     TInt                    iIndex;
    99 private:
    90     CSmileyImage*           iStillImage;
   100     const TSmileyIconInfo   iInfo;
       
   101     MSmileyIconObserver*    iSmileyIconObserver;
       
   102 
       
   103     CSmileyImage*           iThumbnailImage;
       
   104     CSmileyImage*           iAnimationImage;
    91     CSmileyImage*           iAnimationImage;
   105 
    92     RSmileyTextArray        iTextArray;
   106     };
    93     };
   107 
    94 
   108 typedef RArray<CSmileyIcon*> RSmileyIconPtrArray;
    95 typedef RArray<CSmileyIcon*> RSmileyIconPtrArray;
   109 
    96 
   110 
    97 
   120     void DiscardAll();
   107     void DiscardAll();
   121     TInt TaskCount() const;
   108     TInt TaskCount() const;
   122     void DoNextTaskL();
   109     void DoNextTaskL();
   123 
   110 
   124 private:
   111 private:
   125     RSmileyIconPtrArray     iTaskArray;
   112     RSmileyIconPtrArray     iLoadingTaskArray;
   126     TBool                   iIsLoading;
       
   127     
   113     
   128     };
   114     };
   129 
   115 
   130 ////////////////////////////////////////////////////////////////////
   116 ////////////////////////////////////////////////////////////////////
   131 
   117 
   132 class CSmileyModel : public CBase, public MSmileyIconObserver
   118 class CSmileyTextTreeNode;
       
   119 
       
   120 class CSmileyModel : public CBase, public MAknSmileyObserver
   133     {
   121     {
   134 public:
   122 public:
   135     CSmileyModel(MSmileyIconObserver* aObserver);
   123     CSmileyModel(MAknSmileyObserver* aObserver);
   136     ~CSmileyModel();
   124     virtual ~CSmileyModel();
   137 
   125 
   138 public:
   126 public:
   139     void LoadResourceL();
   127     void LoadResourceL();
   140     void ReleaseResource();
   128     void ReleaseResource();
   141     void LoadThumbnailAsyn(TInt aIndex);
       
   142     void SetSize(const TSize& aSize);
       
   143 
   129 
   144 public:
   130 public:
   145     enum TIconId
   131     TInt ConvertCodesToTextL(TDes& aText);
   146         {
   132     TInt ConvertTextToCodesL(TDes& aText);
   147         EIconSwitchToSmiley = 0, 
   133     const TDesC& Text(TChar aCode) const;
   148         EIconSwitchToSct,
   134     TBool IsSmiley(TChar aCode) const;
   149         EIconSmiley
   135     
   150         };
   136 public:
       
   137     void SetSize(const TSize& aSize);
       
   138     void SetSizeByFont(const CFont* aFont);
       
   139     
       
   140 public:
       
   141     void DrawText(CWindowGc& aGc, const TDesC& aText, const CFont* aFont, const TPoint& aPosition) const;
       
   142     void DrawText(CWindowGc& aGc, const TDesC& aText, const TAknLayoutText& aLayout, TBool aUseLogicalToVisualConversion=EFalse) const;
       
   143     void DrawText(CWindowGc& aGc, const TDesC& aText, const CFont* aFont, const TRect& aBox, TInt aBaselineOffset, 
       
   144                   CGraphicsContext::TTextAlign aAlignment=CGraphicsContext::ELeft, TInt aLeftMargin=0) const;
   151 
   145 
   152     CSmileyIcon* operator[](TInt aIndex) const;
   146 private:
       
   147     void DrawText(CWindowGc& aGc, const TDesC& aText, const CFont* aFont, const TRect& aBox, const TPoint& aOffset) const;
       
   148     
       
   149 public:
   153     TInt Count() const;
   150     TInt Count() const;
       
   151     CAknSmileyIcon* Smiley(TChar aCode) const;
       
   152     CAknSmileyIcon* operator[](TInt aIndex) const;
   154 
   153 
   155 private: // from MSmileyIconObserver
   154 private: // from MSmileyIconObserver
   156     virtual void ThumbnailLoaded(CSmileyIcon* aSmileyIcon);
   155     virtual void SmileyStillImageLoaded(CAknSmileyIcon* aSmileyIcon);
   157     virtual void AnimationChanged(CSmileyIcon* aSmileyIcon);
   156     virtual void SmileyAnimationChanged(CAknSmileyIcon* aSmileyIcon);
       
   157 
       
   158 public: // for smiley picker
       
   159     CAknSmileyIcon* SwitchToSmileyIcon() const;
       
   160     CAknSmileyIcon* SwitchToSctIcon() const;
       
   161     TChar SwitchToSmileyCode() const;
       
   162     TChar SwitchToSctCode() const;
       
   163 
       
   164     TChar SmileyCode(TInt aIndex, TInt aVariate=0) const;
       
   165     TChar SmileyCode(CAknSmileyIcon* aSmileyIcon) const;
       
   166     void LoadStillImagesL(const TDesC& aText);
       
   167     void LoadStillImageL(TChar aChar);
   158 
   168 
   159 private:
   169 private:
   160     MSmileyIconObserver*        iSmileyIconObserver;
   170     const TDesC& Text(TInt aIndex, TInt aVariate=0) const;
       
   171     TInt ArrayCount() const;
       
   172     TChar EncodeSmileyCode(TInt aIndex, TInt aVariate) const;
       
   173     TBool DecodeSmileyCode(TChar aCode, TInt& aIndex, TInt& aVariate) const;
       
   174 
       
   175 private:
       
   176     MAknSmileyObserver*         iSmileyIconObserver;
       
   177     CSmileyTnumbnailAsynLoader  iSmileyLoader;
   161     RSmileyIconPtrArray         iSmileyIconArray;
   178     RSmileyIconPtrArray         iSmileyIconArray;
   162     CSmileyTnumbnailAsynLoader  iSmileyThumbnailLoader;
   179     TUint                       iBaseCode;
       
   180     
       
   181     CSmileyTextTreeNode*        iTextSearchTree;
       
   182     TBuf<1024*2>                iConvertBuffer;
   163     
   183     
   164     };
   184     };
   165 
   185 
   166 #endif // AKNSMILEYMODEL_H
   186 #endif // AKNSMILEYMODEL_H