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 |