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