|
1 /* |
|
2 * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Implementation of the class CESMRGenericFieldEvent |
|
15 * |
|
16 */ |
|
17 |
|
18 #include "emailtrace.h" |
|
19 #include "cesmrgenericfieldevent.h" |
|
20 |
|
21 namespace { // codescanner::namespace |
|
22 |
|
23 #ifdef _DEBUG |
|
24 |
|
25 enum TPanic |
|
26 { |
|
27 EInvalidCast, |
|
28 }; |
|
29 |
|
30 _LIT( KPanicCategory, "CESMRFieldEventValue"); |
|
31 |
|
32 #endif |
|
33 |
|
34 } |
|
35 |
|
36 // ======== MEMBER FUNCTIONS ======== |
|
37 |
|
38 // --------------------------------------------------------------------------- |
|
39 // CESMRGenericFieldEvent::CESMRGenericFieldEvent |
|
40 // --------------------------------------------------------------------------- |
|
41 // |
|
42 CESMRGenericFieldEvent::CESMRGenericFieldEvent( |
|
43 MESMRFieldEventNotifier* aSource, |
|
44 MESMRFieldEvent::TEventType aType ) |
|
45 : iType( aType ), |
|
46 iSource( aSource ) |
|
47 { |
|
48 FUNC_LOG; |
|
49 // Do nothing |
|
50 } |
|
51 |
|
52 // --------------------------------------------------------------------------- |
|
53 // CESMRGenericFieldEvent::NewL |
|
54 // --------------------------------------------------------------------------- |
|
55 // |
|
56 EXPORT_C CESMRGenericFieldEvent* |
|
57 CESMRGenericFieldEvent::NewL( MESMRFieldEventNotifier* aSource, |
|
58 MESMRFieldEvent::TEventType aType ) |
|
59 { |
|
60 FUNC_LOG; |
|
61 CESMRGenericFieldEvent* self = CESMRGenericFieldEvent::NewLC( aSource, |
|
62 aType ); |
|
63 CleanupStack::Pop( self ); |
|
64 return self; |
|
65 } |
|
66 |
|
67 |
|
68 // --------------------------------------------------------------------------- |
|
69 // CESMRGenericFieldEvent::NewLC |
|
70 // --------------------------------------------------------------------------- |
|
71 // |
|
72 EXPORT_C CESMRGenericFieldEvent* |
|
73 CESMRGenericFieldEvent::NewLC( MESMRFieldEventNotifier* aSource, |
|
74 MESMRFieldEvent::TEventType aType ) |
|
75 { |
|
76 FUNC_LOG; |
|
77 CESMRGenericFieldEvent* self = |
|
78 new( ELeave ) CESMRGenericFieldEvent( aSource, aType ); |
|
79 CleanupStack::PushL( self ); |
|
80 return self; |
|
81 } |
|
82 |
|
83 |
|
84 // --------------------------------------------------------------------------- |
|
85 // CESMRGenericFieldEvent::~CESMRGenericFieldEvent |
|
86 // --------------------------------------------------------------------------- |
|
87 // |
|
88 CESMRGenericFieldEvent::~CESMRGenericFieldEvent() |
|
89 { |
|
90 FUNC_LOG; |
|
91 iParams.ResetAndDestroy(); |
|
92 } |
|
93 |
|
94 |
|
95 // --------------------------------------------------------------------------- |
|
96 // CESMRGenericFieldEvent::AddParamL |
|
97 // --------------------------------------------------------------------------- |
|
98 // |
|
99 EXPORT_C void CESMRGenericFieldEvent::AddParamL( |
|
100 CESMRFieldEventValue* aValue, |
|
101 TBool aEncapsulate) |
|
102 { |
|
103 FUNC_LOG; |
|
104 MESMRFieldEventValue* value = aValue; |
|
105 if ( aEncapsulate ) |
|
106 { |
|
107 // Reserve space so next append will succeed |
|
108 iParams.ReserveL( iParams.Count() + 1 ); |
|
109 value = CESMRFieldEventValue::NewL( // codescanner::forgottoputptroncleanupstack |
|
110 CESMRFieldEventValue::EESMRFieldEventValue, |
|
111 value ); |
|
112 } |
|
113 iParams.AppendL( value ); |
|
114 } |
|
115 |
|
116 // --------------------------------------------------------------------------- |
|
117 // From class MESMRFieldEvent. |
|
118 // CESMRGenericFieldEvent::Type |
|
119 // --------------------------------------------------------------------------- |
|
120 // |
|
121 MESMRFieldEvent::TEventType CESMRGenericFieldEvent::Type() const |
|
122 { |
|
123 FUNC_LOG; |
|
124 return iType; |
|
125 } |
|
126 |
|
127 // --------------------------------------------------------------------------- |
|
128 // From class MESMRFieldEvent. |
|
129 // CESMRGenericFieldEvent::Source |
|
130 // --------------------------------------------------------------------------- |
|
131 // |
|
132 MESMRFieldEventNotifier* CESMRGenericFieldEvent::Source() const |
|
133 { |
|
134 FUNC_LOG; |
|
135 return iSource; |
|
136 } |
|
137 |
|
138 // --------------------------------------------------------------------------- |
|
139 // From class MESMRFieldEvent. |
|
140 // CESMRGenericFieldEvent::ParamCount |
|
141 // --------------------------------------------------------------------------- |
|
142 // |
|
143 TInt CESMRGenericFieldEvent::ParamCount() const |
|
144 { |
|
145 FUNC_LOG; |
|
146 return iParams.Count(); |
|
147 } |
|
148 |
|
149 // --------------------------------------------------------------------------- |
|
150 // From class MESMRFieldEvent. |
|
151 // CESMRGenericFieldEvent::Param |
|
152 // --------------------------------------------------------------------------- |
|
153 // |
|
154 TAny* CESMRGenericFieldEvent::Param( TInt aIndex ) const |
|
155 { |
|
156 FUNC_LOG; |
|
157 return iParams[ aIndex ]->Value(); // codescanner::accessArrayElementWithoutCheck2 |
|
158 } |
|
159 |
|
160 // Class CESMRFieldEventValue |
|
161 |
|
162 // --------------------------------------------------------------------------- |
|
163 // CESMRFieldEventValue::CESMRFieldEventValue |
|
164 // --------------------------------------------------------------------------- |
|
165 // |
|
166 CESMRFieldEventValue::CESMRFieldEventValue( |
|
167 MESMRFieldEventValue::TValueType aType ) |
|
168 : iType( aType ) |
|
169 { |
|
170 FUNC_LOG; |
|
171 // Do nothing |
|
172 } |
|
173 |
|
174 // --------------------------------------------------------------------------- |
|
175 // CESMRFieldEventValue::ConstructL |
|
176 // --------------------------------------------------------------------------- |
|
177 // |
|
178 void CESMRFieldEventValue::ConstructL( TAny* aValue ) |
|
179 { |
|
180 FUNC_LOG; |
|
181 switch ( iType ) |
|
182 { |
|
183 case EESMRTTime: |
|
184 { |
|
185 // Copy value |
|
186 TTime* time = static_cast< TTime* >( aValue ); |
|
187 iValue = new( ELeave ) TTime( *time ); |
|
188 break; |
|
189 } |
|
190 case EESMRInteger: |
|
191 { |
|
192 TInt* value = static_cast< TInt* >( aValue ); |
|
193 iValue = new( ELeave ) TInt( *value ); |
|
194 break; |
|
195 } |
|
196 default: |
|
197 { |
|
198 iValue = aValue; |
|
199 break; |
|
200 } |
|
201 } |
|
202 } |
|
203 |
|
204 // --------------------------------------------------------------------------- |
|
205 // CESMRFieldEventValue::NewL |
|
206 // --------------------------------------------------------------------------- |
|
207 // |
|
208 EXPORT_C CESMRFieldEventValue* CESMRFieldEventValue::NewL( |
|
209 MESMRFieldEventValue::TValueType aType, |
|
210 TAny* aValue ) |
|
211 { |
|
212 FUNC_LOG; |
|
213 CESMRFieldEventValue* self = CESMRFieldEventValue::NewLC( aType, aValue ); |
|
214 CleanupStack::Pop( self ); |
|
215 return self; |
|
216 } |
|
217 |
|
218 // --------------------------------------------------------------------------- |
|
219 // CESMRFieldEventValue::NewLC |
|
220 // --------------------------------------------------------------------------- |
|
221 // |
|
222 EXPORT_C CESMRFieldEventValue* CESMRFieldEventValue::NewLC( |
|
223 MESMRFieldEventValue::TValueType aType, |
|
224 TAny* aValue ) |
|
225 { |
|
226 FUNC_LOG; |
|
227 CESMRFieldEventValue* self = new( ELeave ) CESMRFieldEventValue( aType ); |
|
228 CleanupStack::PushL( self ); |
|
229 self->ConstructL( aValue ); |
|
230 return self; |
|
231 } |
|
232 |
|
233 // --------------------------------------------------------------------------- |
|
234 // CESMRFieldEventValue::~CESMRFieldEventValue |
|
235 // --------------------------------------------------------------------------- |
|
236 // |
|
237 |
|
238 CESMRFieldEventValue::~CESMRFieldEventValue() |
|
239 { |
|
240 FUNC_LOG; |
|
241 // Delete owned values |
|
242 switch ( iType ) |
|
243 { |
|
244 case EESMRString: |
|
245 { |
|
246 TDesC* value = static_cast< TDesC* >( iValue ); |
|
247 delete value; |
|
248 break; |
|
249 } |
|
250 case EESMRString8: |
|
251 { |
|
252 TDesC8* value = static_cast< TDesC8* >( iValue ); |
|
253 delete value; |
|
254 break; |
|
255 } |
|
256 case EESMRFieldEventValue: |
|
257 case EESMRCBase: |
|
258 { |
|
259 CBase* value = static_cast< CBase* >( iValue ); |
|
260 delete value; |
|
261 break; |
|
262 } |
|
263 case EESMRTTime: |
|
264 { |
|
265 TTime* time = static_cast< TTime* >( iValue ); |
|
266 delete time; |
|
267 break; |
|
268 } |
|
269 case EESMRInteger: |
|
270 { |
|
271 TInt* value = static_cast< TInt* >( iValue ); |
|
272 delete value; |
|
273 break; |
|
274 } |
|
275 default: |
|
276 { |
|
277 break; |
|
278 } |
|
279 } |
|
280 } |
|
281 |
|
282 // --------------------------------------------------------------------------- |
|
283 // CESMRFieldEventValue::Type |
|
284 // --------------------------------------------------------------------------- |
|
285 // |
|
286 MESMRFieldEventValue::TValueType CESMRFieldEventValue::Type() const |
|
287 { |
|
288 FUNC_LOG; |
|
289 return iType; |
|
290 } |
|
291 |
|
292 // --------------------------------------------------------------------------- |
|
293 // CESMRFieldEventValue::Value |
|
294 // --------------------------------------------------------------------------- |
|
295 // |
|
296 |
|
297 TAny* CESMRFieldEventValue::Value() const |
|
298 { |
|
299 FUNC_LOG; |
|
300 return iValue; |
|
301 } |
|
302 |
|
303 // --------------------------------------------------------------------------- |
|
304 // CESMRFieldEventValue::IntValue |
|
305 // --------------------------------------------------------------------------- |
|
306 // |
|
307 TInt CESMRFieldEventValue::IntValue() const |
|
308 { |
|
309 FUNC_LOG; |
|
310 __ASSERT_DEBUG( iType == EESMRInteger, |
|
311 User::Panic( KPanicCategory, EInvalidCast ) ); |
|
312 TInt* value = static_cast< TInt* >( iValue ); |
|
313 return *value; |
|
314 } |
|
315 |
|
316 // --------------------------------------------------------------------------- |
|
317 // CESMRFieldEventValue::StringValue |
|
318 // --------------------------------------------------------------------------- |
|
319 // |
|
320 const TDesC& CESMRFieldEventValue::StringValue() const |
|
321 { |
|
322 FUNC_LOG; |
|
323 __ASSERT_DEBUG( ( iType == EESMRString |
|
324 || iType == EESMRStringRef ), |
|
325 User::Panic( KPanicCategory, EInvalidCast ) ); |
|
326 TDesC* string = static_cast< TDesC* >( iValue ); |
|
327 return *string; |
|
328 } |
|
329 |
|
330 // --------------------------------------------------------------------------- |
|
331 // CESMRFieldEventValue::String8Value |
|
332 // --------------------------------------------------------------------------- |
|
333 // |
|
334 const TDesC8& CESMRFieldEventValue::String8Value() const |
|
335 { |
|
336 FUNC_LOG; |
|
337 __ASSERT_DEBUG( ( iType == EESMRString8 |
|
338 || iType == EESMRString8Ref ), |
|
339 User::Panic( KPanicCategory, EInvalidCast ) ); |
|
340 TDesC8* string = static_cast< TDesC8* >( iValue ); |
|
341 return *string; |
|
342 } |
|
343 |
|
344 // --------------------------------------------------------------------------- |
|
345 // CESMRFieldEventValue::FieldValue |
|
346 // --------------------------------------------------------------------------- |
|
347 // |
|
348 const CESMRField& CESMRFieldEventValue::FieldValue() const |
|
349 { |
|
350 FUNC_LOG; |
|
351 __ASSERT_DEBUG( iType == EESMRFieldRef, |
|
352 User::Panic( KPanicCategory, EInvalidCast ) ); |
|
353 CESMRField* field = static_cast< CESMRField* >( iValue ); |
|
354 return *field; |
|
355 } |
|
356 |
|
357 // --------------------------------------------------------------------------- |
|
358 // CESMRFieldEventValue::CBaseValue |
|
359 // --------------------------------------------------------------------------- |
|
360 // |
|
361 const CBase* CESMRFieldEventValue::CBaseValue() const |
|
362 { |
|
363 FUNC_LOG; |
|
364 __ASSERT_DEBUG( ( iType == EESMRCBase |
|
365 || iType == EESMRCBaseRef |
|
366 || iType == EESMRFieldEventValue |
|
367 || iType == EESMRFieldRef ), |
|
368 User::Panic( KPanicCategory, EInvalidCast ) ); |
|
369 CBase* base = static_cast< CBase* >( iValue ); |
|
370 return base; |
|
371 } |
|
372 |
|
373 // --------------------------------------------------------------------------- |
|
374 // CESMRFieldEventValue::TimeValue |
|
375 // --------------------------------------------------------------------------- |
|
376 // |
|
377 TTime CESMRFieldEventValue::TimeValue() const |
|
378 { |
|
379 FUNC_LOG; |
|
380 __ASSERT_DEBUG( iType == EESMRTTime, |
|
381 User::Panic( KPanicCategory, EInvalidCast ) ); |
|
382 TTime* time = static_cast< TTime* >( iValue ); |
|
383 return *time; |
|
384 } |
|
385 |