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 |