|
1 /* |
|
2 * Copyright (c) 2005-2007 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: General theme view's container. |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 // INCLUDE FILES |
|
20 // General |
|
21 #include <aknlists.h> |
|
22 #include <eikclbd.h> |
|
23 #include <StringLoader.h> |
|
24 #include <AknGlobalNote.h> |
|
25 |
|
26 #include <aknlocalskinlib.h> |
|
27 #include <aknlistloadertfx.h> |
|
28 |
|
29 #include <aknnotewrappers.h> |
|
30 |
|
31 // Resources. |
|
32 #include <psln.rsg> |
|
33 |
|
34 // Constants. |
|
35 #include "PslnConst.h" |
|
36 |
|
37 // Help context. |
|
38 #include <csxhelp/skins.hlp.hrh> |
|
39 |
|
40 // HAL |
|
41 #include <hal.h> |
|
42 |
|
43 // General - psln specific. |
|
44 #include "PslnGeneralThemeContainer.h" |
|
45 #include "PslnFeatures.h" |
|
46 #include "PslnModel.h" |
|
47 #include "PslnDebug.h" |
|
48 #include "PslnSkinEntry.h" |
|
49 #include "PslnUi.h" |
|
50 |
|
51 // Central Repository and Publish&Subscribe keys. |
|
52 #include <centralrepository.h> |
|
53 #include "pslninternalcrkeys.h" |
|
54 |
|
55 |
|
56 // Framework |
|
57 #include <pslnfwiconhelper.h> |
|
58 #include <mpslnfwmsklabelobserver.h> |
|
59 |
|
60 // Constant for delay for the first timer event |
|
61 const TTimeIntervalMicroSeconds32 KIdlePreviewDelay = 250000; |
|
62 |
|
63 // Constant for interval for the subsequent timer events |
|
64 const TTimeIntervalMicroSeconds32 KIdlePreviewInterval = 200000; |
|
65 |
|
66 // ============================ MEMBER FUNCTIONS =============================== |
|
67 // ----------------------------------------------------------------------------- |
|
68 // C++ default constructor can NOT contain any code, that might leave. |
|
69 // ----------------------------------------------------------------------------- |
|
70 // |
|
71 CPslnGeneralThemeContainer::CPslnGeneralThemeContainer() |
|
72 { |
|
73 } |
|
74 |
|
75 // ----------------------------------------------------------------------------- |
|
76 // Symbian 2nd phase constructor can leave. |
|
77 // ----------------------------------------------------------------------------- |
|
78 // |
|
79 void CPslnGeneralThemeContainer::ConstructL( const TRect& aRect ) |
|
80 { |
|
81 iListBox = new (ELeave) CAknSingleGraphicStyleListBox; |
|
82 |
|
83 |
|
84 iPreviewIdle = CPeriodic::NewL( CActive::EPriorityIdle ); |
|
85 |
|
86 RFs& fs = CCoeEnv::Static()->FsSession(); |
|
87 iLocalSkinInstance = CAknLocalSkinInstance::NewL ( fs, iModel->SkinSrvSession() ); |
|
88 |
|
89 if( PslnFeatures::IsSupported( KPslnSupportFastPreviewTheme ) ) |
|
90 { |
|
91 InitPreviewTime(); |
|
92 } |
|
93 BaseConstructL( aRect, R_PSLN_SKIN_LIST_VIEW_TITLE, KPslnNoResource ); |
|
94 iOldSkinNum = iModel->NumberOfSkins(); |
|
95 } |
|
96 |
|
97 // Destructor |
|
98 CPslnGeneralThemeContainer::~CPslnGeneralThemeContainer() |
|
99 { |
|
100 // iListBox is deleted in class CPslnBaseContainer. |
|
101 |
|
102 iSkinItemList.Reset(); |
|
103 |
|
104 if ( iPreviewIdle ) |
|
105 { |
|
106 iPreviewIdle->Cancel(); |
|
107 } |
|
108 delete iPreviewIdle; |
|
109 delete iLocalSkinInstance; |
|
110 |
|
111 // Remove locally skinned items. |
|
112 MAknsSkinInstance* si = AknsUtils::SkinInstance(); |
|
113 if ( si ) |
|
114 { |
|
115 si->SetChangeEventsEnabled( EFalse ); |
|
116 si->RemoveLocalItemDefs(); |
|
117 si->SetChangeEventsEnabled( ETrue ); |
|
118 } |
|
119 } |
|
120 |
|
121 // --------------------------------------------------------------------------- |
|
122 // Checks if embedded browser is supported. |
|
123 // --------------------------------------------------------------------------- |
|
124 // |
|
125 TBool CPslnGeneralThemeContainer::IsEmbeddedLinkVisible() const |
|
126 { |
|
127 return PslnFeatures::IsEnhancedEmbeddedLinksSupported(); |
|
128 } |
|
129 |
|
130 // --------------------------------------------------------------------------- |
|
131 // Updates skin item list. |
|
132 // --------------------------------------------------------------------------- |
|
133 // |
|
134 void CPslnGeneralThemeContainer::UpdateSkinListItemsL( const TInt& aNewIndex ) |
|
135 { |
|
136 // This is needed to make the list effects update |
|
137 CAknListLoader::InvalidateAll(); |
|
138 |
|
139 PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::UpdateSkinListItemsL"); |
|
140 // Update skins. |
|
141 iItemArray->Reset(); |
|
142 iToBeUsedIndex = KErrNotFound; |
|
143 if ( aNewIndex != KErrNotFound ) |
|
144 { |
|
145 iToBeUsedIndex = aNewIndex; |
|
146 } |
|
147 CreateListBoxItemsL(); |
|
148 |
|
149 // Create pre- and post-text icons. |
|
150 CPslnFWIconHelper* iconHelper = CPslnFWIconHelper::NewL(); |
|
151 CleanupStack::PushL( iconHelper ); |
|
152 iconHelper->AddIconsToSettingItemsL( |
|
153 ETrue, |
|
154 KErrNotFound, // not used since we are adding all |
|
155 iListBox ); |
|
156 CleanupStack::PopAndDestroy( iconHelper ); |
|
157 |
|
158 } |
|
159 |
|
160 // ----------------------------------------------------------------------------- |
|
161 // Creates listbox. |
|
162 // ----------------------------------------------------------------------------- |
|
163 // |
|
164 void CPslnGeneralThemeContainer::ConstructListBoxL( TInt /*aResLbxId*/ ) |
|
165 { |
|
166 iListBox->DisableSingleClick( ETrue ); |
|
167 UpdateSkinListItemsL( KErrNotFound ); |
|
168 } |
|
169 |
|
170 // ----------------------------------------------------------------------------- |
|
171 // Empty implementation of inherited method. |
|
172 // ----------------------------------------------------------------------------- |
|
173 // |
|
174 void CPslnGeneralThemeContainer::CreateListBoxItemsL() |
|
175 { |
|
176 PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::CreateListBoxItemsL BEGIN"); |
|
177 TInt downloadAdded = 0; |
|
178 if ( IsEmbeddedLinkVisible() ) |
|
179 { |
|
180 HBufC* text = StringLoader::LoadLC( |
|
181 R_PSLN_QTN_SKINS_DOWNLOAD_SKINS, iEikonEnv ); |
|
182 // Reallocating invalidates original text, so it is required that |
|
183 // original text is popped from cleanupstack, then reassigned to |
|
184 // reallocated value and finally pushed back to cleanupstack. |
|
185 HBufC* reallocText = text->ReAllocL( text->Length() + KPslnIconSize ); |
|
186 CleanupStack::Pop( text ); |
|
187 text = reallocText; |
|
188 CleanupStack::PushL( text ); |
|
189 // Do not use reallocated string after assigning it to the original. |
|
190 reallocText = NULL; |
|
191 TPtr textPtr = text->Des(); |
|
192 |
|
193 textPtr.Insert( 0, KPslnFWEmbeddedLinkListItemFormat ); |
|
194 iItemArray->InsertL( 0, textPtr ); |
|
195 downloadAdded = 1; |
|
196 CleanupStack::PopAndDestroy( text ); |
|
197 } |
|
198 |
|
199 TInt maxSkinIndex = 0; |
|
200 if ( iModel ) |
|
201 { |
|
202 // If current skin is not found => update from server. |
|
203 if ( iModel->ActiveSkinIndex() == KErrNotFound ) |
|
204 { |
|
205 iModel->PerformCompleteUpdateL(); |
|
206 } |
|
207 maxSkinIndex = iModel->NumberOfSkins(); |
|
208 } |
|
209 |
|
210 HBufC* skinName = HBufC::NewLC( KMaxName ); |
|
211 TInt currentlyActiveSkinIndex = KErrNotFound; |
|
212 static_cast<CPslnUi*>( ControlEnv()->AppUi() )-> |
|
213 SetDRMProtectedSkinInSkinList( EFalse ); |
|
214 |
|
215 for ( TInt skinIndex = KPslnSeries60SkinIndex; |
|
216 skinIndex < maxSkinIndex; skinIndex++ ) |
|
217 { |
|
218 PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::CreateListBoxItemsL 3"); |
|
219 TPtr skinNamePtr = skinName->Des(); |
|
220 iModel->GetSkinNameByIndex( |
|
221 skinIndex, |
|
222 skinNamePtr, |
|
223 EPslnSkinNameTypeList ); |
|
224 |
|
225 // Add pre-text icon. |
|
226 if ( iModel->IsActiveSkinSelected( skinIndex ) ) |
|
227 { |
|
228 skinNamePtr.Insert( 0, KPslnFWActiveListItemFormat ); |
|
229 currentlyActiveSkinIndex = skinIndex; |
|
230 } |
|
231 else |
|
232 { |
|
233 skinNamePtr.Insert( 0, KPslnFWNonActiveListItemFormat ); |
|
234 } |
|
235 |
|
236 if( iModel->IsActiveSkinSelected( skinIndex ) && iToBeUsedIndex == KErrNotFound ) |
|
237 { |
|
238 iModel->SetCurrentSelectedSkinIndex (skinIndex); |
|
239 iToBeUsedIndex = skinIndex + downloadAdded; |
|
240 } |
|
241 |
|
242 // Add post-text icon(s). |
|
243 #ifndef RD_MULTIPLE_DRIVE |
|
244 if( iModel->LocationOfSkin( skinIndex ) == EAknsSrvMMC ) |
|
245 { |
|
246 skinNamePtr.Append( KPslnFWListItemFormatMMCSuffix ); |
|
247 } |
|
248 #else |
|
249 if( iModel->IsThemeOnMemoryCard( skinIndex ) ) |
|
250 { |
|
251 skinNamePtr.Append( KPslnFWListItemFormatMMCSuffix ); |
|
252 } |
|
253 else if( iModel->IsThemeOnMassDrive( skinIndex ) ) |
|
254 { |
|
255 skinNamePtr.Append( KPslnFWListItemFormatMassDriveSuffix ); |
|
256 } |
|
257 #endif // RD_MULTIPLE_DRIVE |
|
258 |
|
259 switch( iModel->ProtectionOfSkin( skinIndex ) ) |
|
260 { |
|
261 case EAknsSrvProtected: |
|
262 skinNamePtr.Append( KPslnFWListItemFormatDRMProtectedSuffix ); |
|
263 static_cast<CPslnUi*>( ControlEnv()->AppUi() )-> |
|
264 SetDRMProtectedSkinInSkinList( ETrue ); |
|
265 break; |
|
266 case EAknsSrvNoRights: |
|
267 case EAknsSrvCountBased: |
|
268 case EAknsSrvFutureRights: |
|
269 case EAknsSrvExpiredRights: |
|
270 skinNamePtr.Append( KPslnFWListItemFormatDRMExpiredSuffix ); |
|
271 static_cast<CPslnUi*>( ControlEnv()->AppUi() )-> |
|
272 SetDRMProtectedSkinInSkinList( ETrue ); |
|
273 break; |
|
274 case EAknsSrvNoProtection: |
|
275 default: |
|
276 // Do nothing |
|
277 break; |
|
278 } |
|
279 PSLN_TRACE_DEBUG1("CPslnGeneralThemeContainer::CreateListBoxItemsL postfix icon: %d", iModel->ProtectionOfSkin( skinIndex ) ); |
|
280 iItemArray->InsertL( ( skinIndex + downloadAdded ), skinNamePtr ); |
|
281 skinNamePtr.Zero(); |
|
282 } |
|
283 CleanupStack::PopAndDestroy( skinName ); |
|
284 |
|
285 if ( iOldSkinNum != maxSkinIndex ) |
|
286 { |
|
287 iToBeUsedIndex = currentlyActiveSkinIndex + downloadAdded; |
|
288 } |
|
289 if ( ( iToBeUsedIndex >= ( 0 + downloadAdded ) ) && |
|
290 ( iToBeUsedIndex <= ( maxSkinIndex + downloadAdded ) ) ) |
|
291 { |
|
292 SetCurrentItemIndex( iToBeUsedIndex ); |
|
293 iActiveSkinItemIndex = iToBeUsedIndex; |
|
294 } |
|
295 else |
|
296 { |
|
297 SetCurrentItemIndex( ( currentlyActiveSkinIndex + downloadAdded ) ); |
|
298 iActiveSkinItemIndex = currentlyActiveSkinIndex + downloadAdded; |
|
299 } |
|
300 iListBox->HandleItemAdditionL(); |
|
301 if ( iOldSkinNum != maxSkinIndex ) |
|
302 { |
|
303 StartThemePreviewL(); |
|
304 iOldSkinNum = maxSkinIndex; |
|
305 } |
|
306 PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::CreateListBoxItemsL END"); |
|
307 } |
|
308 |
|
309 // --------------------------------------------------------------------------- |
|
310 // Updates D column icons. |
|
311 // --------------------------------------------------------------------------- |
|
312 // |
|
313 void CPslnGeneralThemeContainer::UpdateSkinListItemsDColumnOnlyL() |
|
314 { |
|
315 // Create pre- and post-text icons. |
|
316 CPslnFWIconHelper* iconHelper = CPslnFWIconHelper::NewL(); |
|
317 CleanupStack::PushL( iconHelper ); |
|
318 iconHelper->AddIconsToSettingItemsL( |
|
319 ETrue, |
|
320 KErrNotFound, // not used since we are adding all |
|
321 iListBox ); |
|
322 CleanupStack::PopAndDestroy( iconHelper ); |
|
323 } |
|
324 |
|
325 // --------------------------------------------------------------------------- |
|
326 // Starts theme preview. |
|
327 // --------------------------------------------------------------------------- |
|
328 // |
|
329 void CPslnGeneralThemeContainer::StartThemePreviewL( TBool aTouch ) |
|
330 { |
|
331 // Start timer with 0.5s delay. |
|
332 iPreviewIdle->Cancel(); |
|
333 |
|
334 if( PslnFeatures::IsSupported( KPslnSupportFastPreviewTheme ) ) |
|
335 { |
|
336 iPreviewIdle->Start( |
|
337 aTouch ? iPreviewDelayTime : iPreviewDelayTimeOnHardKey, |
|
338 iPreviewIntervalTime, |
|
339 TCallBack( DoHandleIdleTimeL, this ) ); |
|
340 } |
|
341 else |
|
342 { |
|
343 iPreviewIdle->Start( |
|
344 KIdlePreviewDelay, |
|
345 KIdlePreviewInterval, |
|
346 TCallBack( DoHandleIdleTimeL, this ) ); |
|
347 } |
|
348 } |
|
349 |
|
350 // --------------------------------------------------------------------------- |
|
351 // Cancel theme preview. |
|
352 // --------------------------------------------------------------------------- |
|
353 // |
|
354 void CPslnGeneralThemeContainer::CancelThemePreviewL() |
|
355 { |
|
356 iPreviewIdle->Cancel(); |
|
357 } |
|
358 |
|
359 // --------------------------------------------------------------------------- |
|
360 // Sets theme preview observer. |
|
361 // --------------------------------------------------------------------------- |
|
362 // |
|
363 void CPslnGeneralThemeContainer::SetThemePreviewObserver( |
|
364 MPslnThemePreviewObserver* aObserver ) |
|
365 { |
|
366 iObserver = aObserver; |
|
367 } |
|
368 |
|
369 // --------------------------------------------------------------------------- |
|
370 // Locks up and down key events. |
|
371 // --------------------------------------------------------------------------- |
|
372 // |
|
373 void CPslnGeneralThemeContainer::LockUpAndDownKeys( const TBool& aLocked ) |
|
374 { |
|
375 TRAPD( transitionEffectsValue, iModel->GetTransitionEffectStateL() ); |
|
376 // Effects are enabled if value is NOT KMaxTInt. |
|
377 // Only lock keys, if transition effects are off. |
|
378 if( transitionEffectsValue == KMaxTInt ) |
|
379 { |
|
380 iLockedKeys = aLocked; |
|
381 } |
|
382 } |
|
383 |
|
384 // --------------------------------------------------------------------------- |
|
385 // Gets help context for Help application. |
|
386 // --------------------------------------------------------------------------- |
|
387 // |
|
388 void CPslnGeneralThemeContainer::GetHelpContext( |
|
389 TCoeHelpContext& aContext ) const |
|
390 { |
|
391 aContext.iMajor = KUidPsln; |
|
392 aContext.iContext = KSKINS_HLP_LIST; |
|
393 } |
|
394 |
|
395 // --------------------------------------------------------------------------- |
|
396 // Handles key events. |
|
397 // Starts the new preview theme load before passing the event to base class. |
|
398 // --------------------------------------------------------------------------- |
|
399 // |
|
400 TKeyResponse CPslnGeneralThemeContainer::OfferKeyEventL( |
|
401 const TKeyEvent& aKeyEvent, |
|
402 TEventCode aType ) |
|
403 { |
|
404 TKeyResponse resp = EKeyWasConsumed; |
|
405 |
|
406 // If lock is active, ignore up and down key events. |
|
407 if ( iLockedKeys && |
|
408 !( aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow ) || |
|
409 !iLockedKeys ) |
|
410 { |
|
411 resp = CPslnBaseContainer::OfferKeyEventL( aKeyEvent, aType ); |
|
412 } |
|
413 |
|
414 // React to up and down arrow key events IF download skin is not selected. |
|
415 if ( aType == EEventKey && |
|
416 (aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow ) && |
|
417 !iLockedKeys ) |
|
418 { |
|
419 iObserver->HandlePreviewStateChange( ETrue ); |
|
420 StartThemePreviewL( EFalse ); |
|
421 } |
|
422 |
|
423 return resp; |
|
424 } |
|
425 |
|
426 // --------------------------------------------------------------------------- |
|
427 // Creates the skin item list for local item skinning. |
|
428 // --------------------------------------------------------------------------- |
|
429 // |
|
430 void CPslnGeneralThemeContainer::CreateSkinItemList() |
|
431 { |
|
432 PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::CreateSkinItemList" ); |
|
433 TInt retVal = KErrNone; |
|
434 |
|
435 // Main area, screen, status pane and control pane. |
|
436 retVal += AddItemToList( KAknsIIDQsnBgScreen ); |
|
437 //retVal += AddItemToList( KAknsIIDQsnBgAreaMainListGene ); |
|
438 retVal += AddItemToList( KAknsIIDQsnBgAreaStaconRt ); |
|
439 retVal += AddItemToList( KAknsIIDQsnBgAreaStaconLt ); |
|
440 retVal += AddItemToList( KAknsIIDQsnBgAreaStaconRb ); |
|
441 retVal += AddItemToList( KAknsIIDQsnBgAreaStaconLb ); |
|
442 retVal += AddItemToList( KAknsIIDQsnBgAreaControl ); |
|
443 retVal += AddItemToList( KAknsIIDQsnBgAreaControlPopup ); |
|
444 retVal += AddItemToList( KAknsIIDQsnBgAreaStatus ); |
|
445 retVal += AddItemToList( KAknsIIDQsnFrStatusFlat ); |
|
446 retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCornerTl ); |
|
447 retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCornerTr ); |
|
448 retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCornerBl ); |
|
449 retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCornerBr ); |
|
450 retVal += AddItemToList( KAknsIIDQsnFrStatusFlatSideT ); |
|
451 retVal += AddItemToList( KAknsIIDQsnFrStatusFlatSideB ); |
|
452 retVal += AddItemToList( KAknsIIDQsnFrStatusFlatSideL ); |
|
453 retVal += AddItemToList( KAknsIIDQsnFrStatusFlatSideR ); |
|
454 retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCenter ); |
|
455 |
|
456 // Navipane |
|
457 retVal += AddItemToList( KAknsIIDQsnBgNavipaneSolid ); |
|
458 retVal += AddItemToList( KAknsIIDQsnBgNavipaneWipe ); |
|
459 retVal += AddItemToList( KAknsIIDQgnIndiNaviArrowLeft ); |
|
460 retVal += AddItemToList( KAknsIIDQgnIndiNaviArrowRight ); |
|
461 |
|
462 // Battery pane, signal pane |
|
463 retVal += AddItemToList( KAknsIIDQgnIndiSignalStrength ); |
|
464 retVal += AddItemToList( KAknsIIDQgnIndiBatteryStrength ); |
|
465 |
|
466 // Scrollbars |
|
467 retVal += AddItemToList( KAknsIIDQsnCpScrollBgTop ); |
|
468 retVal += AddItemToList( KAknsIIDQsnCpScrollBgMiddle ); |
|
469 retVal += AddItemToList( KAknsIIDQsnCpScrollBgBottom ); |
|
470 retVal += AddItemToList( KAknsIIDQsnCpScrollHandleBgTop ); |
|
471 retVal += AddItemToList( KAknsIIDQsnCpScrollHandleBgMiddle ); |
|
472 retVal += AddItemToList( KAknsIIDQsnCpScrollHandleBgBottom ); |
|
473 retVal += AddItemToList( KAknsIIDQsnCpScrollHandleTop ); |
|
474 retVal += AddItemToList( KAknsIIDQsnCpScrollHandleMiddle ); |
|
475 retVal += AddItemToList( KAknsIIDQsnCpScrollHandleBottom ); |
|
476 |
|
477 // Tabs |
|
478 retVal += AddItemToList( KAknsIIDQgnGrafTabActiveL ); |
|
479 retVal += AddItemToList( KAknsIIDQgnGrafTabActiveM ); |
|
480 retVal += AddItemToList( KAknsIIDQgnGrafTabActiveR ); |
|
481 retVal += AddItemToList( KAknsIIDQgnGrafTabPassiveL ); |
|
482 retVal += AddItemToList( KAknsIIDQgnGrafTabPassiveM ); |
|
483 retVal += AddItemToList( KAknsIIDQgnGrafTabPassiveR ); |
|
484 |
|
485 // Highlight |
|
486 retVal += AddItemToList( KAknsIIDQsnFrList ); |
|
487 retVal += AddItemToList( KAknsIIDQsnFrListCornerTl ); |
|
488 retVal += AddItemToList( KAknsIIDQsnFrListCornerTr ); |
|
489 retVal += AddItemToList( KAknsIIDQsnFrListCornerBl ); |
|
490 retVal += AddItemToList( KAknsIIDQsnFrListCornerBr ); |
|
491 retVal += AddItemToList( KAknsIIDQsnFrListSideT ); |
|
492 retVal += AddItemToList( KAknsIIDQsnFrListSideB ); |
|
493 retVal += AddItemToList( KAknsIIDQsnFrListSideL ); |
|
494 retVal += AddItemToList( KAknsIIDQsnFrListSideR ); |
|
495 retVal += AddItemToList( KAknsIIDQsnFrListCenter ); |
|
496 |
|
497 // Options menu |
|
498 retVal += AddItemToList( KAknsIIDQsnFrPopup ); |
|
499 retVal += AddItemToList( KAknsIIDQsnFrPopupCornerTl ); |
|
500 retVal += AddItemToList( KAknsIIDQsnFrPopupCornerTr ); |
|
501 retVal += AddItemToList( KAknsIIDQsnFrPopupCornerBl ); |
|
502 retVal += AddItemToList( KAknsIIDQsnFrPopupCornerBr ); |
|
503 retVal += AddItemToList( KAknsIIDQsnFrPopupSideT ); |
|
504 retVal += AddItemToList( KAknsIIDQsnFrPopupSideB ); |
|
505 retVal += AddItemToList( KAknsIIDQsnFrPopupSideL ); |
|
506 retVal += AddItemToList( KAknsIIDQsnFrPopupSideR ); |
|
507 retVal += AddItemToList( KAknsIIDQsnFrPopupCenter ); |
|
508 retVal += AddItemToList( KAknsIIDQsnFrPopupSub ); |
|
509 retVal += AddItemToList( KAknsIIDQsnFrPopupSubCornerTl ); |
|
510 retVal += AddItemToList( KAknsIIDQsnFrPopupSubCornerTr ); |
|
511 retVal += AddItemToList( KAknsIIDQsnFrPopupSubCornerBl ); |
|
512 retVal += AddItemToList( KAknsIIDQsnFrPopupSubCornerBr ); |
|
513 retVal += AddItemToList( KAknsIIDQsnFrPopupSubSideT ); |
|
514 retVal += AddItemToList( KAknsIIDQsnFrPopupSubSideB ); |
|
515 retVal += AddItemToList( KAknsIIDQsnFrPopupSubSideL ); |
|
516 retVal += AddItemToList( KAknsIIDQsnFrPopupSubSideR ); |
|
517 retVal += AddItemToList( KAknsIIDQsnFrPopupCenterSubmenu ); |
|
518 retVal += AddItemToList( KAknsIIDQgnIndiSubmenu ); |
|
519 |
|
520 // Icons |
|
521 retVal += AddItemToList( KAknsIIDQgnPropPslnActive ); |
|
522 retVal += AddItemToList( KAknsIIDQgnIndiMmcAdd ); |
|
523 |
|
524 // QHD specific CBA. |
|
525 retVal += AddItemToList( KAknsIIDQgnIndiSctrlMaskInactLsc ); |
|
526 retVal += AddItemToList( KAknsIIDQgnIndiSctrlMaskActLsc ); |
|
527 retVal += AddItemToList( KAknsIIDQgnFrSctrlButton ); |
|
528 retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCornerTl ); |
|
529 retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCornerTr ); |
|
530 retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCornerBl ); |
|
531 retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCornerBr ); |
|
532 retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonSideT ); |
|
533 retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonSideB ); |
|
534 retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonSideL ); |
|
535 retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonSideR ); |
|
536 retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCenter ); |
|
537 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButton ); |
|
538 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCornerTl ); |
|
539 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCornerTr ); |
|
540 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCornerBl ); |
|
541 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCornerBr ); |
|
542 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonSideT ); |
|
543 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonSideB ); |
|
544 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonSideL ); |
|
545 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonSideR ); |
|
546 retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCenter ); |
|
547 |
|
548 __ASSERT_DEBUG( retVal == KErrNone, User::Panic(_L("Error in inserting"), 1) ); |
|
549 } |
|
550 |
|
551 // --------------------------------------------------------------------------- |
|
552 // Adds one item to skin item list. |
|
553 // --------------------------------------------------------------------------- |
|
554 // |
|
555 TInt CPslnGeneralThemeContainer::AddItemToList( const TAknsItemID& aSkinID ) |
|
556 { |
|
557 TAknsItemID skinItem; |
|
558 skinItem.Set( aSkinID.iMajor, aSkinID.iMinor ); |
|
559 TInt error = iSkinItemList.InsertInOrder( skinItem, TAknsItemID::LinearOrder ); |
|
560 PSLN_TRACE_DEBUG3("CPslnGeneralThemeContainer::AddItemToList item=%d %d added %d", |
|
561 aSkinID.iMajor, aSkinID.iMinor, error ); |
|
562 return error; |
|
563 } |
|
564 |
|
565 // ----------------------------------------------------------------------------- |
|
566 // Callback function when application is idle. |
|
567 // ----------------------------------------------------------------------------- |
|
568 // |
|
569 TInt CPslnGeneralThemeContainer::DoHandleIdleTimeL( TAny* aAny ) |
|
570 { |
|
571 static_cast< CPslnGeneralThemeContainer* >( aAny )->HandleIdleTimeL(); |
|
572 return KErrNone; |
|
573 } |
|
574 |
|
575 // ----------------------------------------------------------------------------- |
|
576 // Callback function when application is idle. |
|
577 // ----------------------------------------------------------------------------- |
|
578 // |
|
579 TInt CPslnGeneralThemeContainer::DoHandleEffectEndL( TAny* aAny ) |
|
580 { |
|
581 static_cast< CPslnGeneralThemeContainer* >( aAny )->HandleEffectEndL(); |
|
582 return KErrNone; |
|
583 } |
|
584 |
|
585 // ----------------------------------------------------------------------------- |
|
586 // Handle idle time. |
|
587 // ----------------------------------------------------------------------------- |
|
588 // |
|
589 void CPslnGeneralThemeContainer::HandleIdleTimeL() |
|
590 { |
|
591 PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::HandleIdleTimeL" ); |
|
592 // First stop timer. |
|
593 iPreviewIdle->Cancel(); |
|
594 |
|
595 |
|
596 // Check free mem |
|
597 TInt freeMem = 0; |
|
598 HAL::Get( HALData::EMemoryRAMFree , freeMem ); |
|
599 if( freeMem <= KPslnMinMemSize ) |
|
600 { |
|
601 HBufC* errorBuf = StringLoader::LoadLC( |
|
602 R_PSLN_QTN_MEMLO_RAM_OUT_OF_MEM ); |
|
603 // Display global note. |
|
604 CAknGlobalNote* errorNote = CAknGlobalNote::NewLC(); |
|
605 errorNote->ShowNoteL( EAknGlobalErrorNote, *errorBuf ); |
|
606 CleanupStack::PopAndDestroy( 2 ); // errorNote & errorBuf |
|
607 return; |
|
608 } |
|
609 |
|
610 // Ignore download skin item if it is available. |
|
611 TInt modifier = IsEmbeddedLinkVisible(); |
|
612 TInt activeSkinIndex = iListBox->CurrentItemIndex() - modifier; |
|
613 |
|
614 TBool usbAttached = static_cast<CPslnUi*>( ControlEnv()->AppUi() )->USBAttachState(); |
|
615 |
|
616 iActiveSkinItemIndex = iListBox->CurrentItemIndex(); |
|
617 if( iModel->IsValidForPreview(activeSkinIndex) == EFalse ) |
|
618 { |
|
619 // If skin file didn't valid, preview active skin. |
|
620 activeSkinIndex = iModel->ActiveSkinIndex(); |
|
621 } |
|
622 if ( IsEmbeddedLinkVisible() && iListBox->CurrentItemIndex() == 0 ) |
|
623 { |
|
624 activeSkinIndex = iModel->ActiveSkinIndex(); |
|
625 } |
|
626 if( iModel->IsThemeOnMemoryCard( activeSkinIndex ) && usbAttached) |
|
627 { |
|
628 activeSkinIndex = 0; |
|
629 } |
|
630 |
|
631 CPslnSkinEntry* activeSkin = iModel->VisibleSkin( activeSkinIndex ); |
|
632 |
|
633 if ( activeSkin ) |
|
634 { |
|
635 // Re-create the list, since skin preview library removes skinned items |
|
636 // from used list (performance reasons). |
|
637 iSkinItemList.Reset(); |
|
638 CreateSkinItemList(); |
|
639 PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::HandleIdleTimeL Create Preview" ); |
|
640 static_cast<CPslnUi*>( ControlEnv()->AppUi() )->ToggleScreenBlankerL( ETrue, ETrue, EFalse ); |
|
641 |
|
642 if ( iModel->IsActiveSkinSelected( activeSkinIndex ) ) |
|
643 { |
|
644 // Remove locally skinned items. |
|
645 MAknsSkinInstance* si = AknsUtils::SkinInstance(); |
|
646 if ( si ) |
|
647 { |
|
648 si->SetChangeEventsEnabled( EFalse ); |
|
649 si->RemoveLocalItemDefs(); |
|
650 si->SetChangeEventsEnabled( ETrue ); |
|
651 } |
|
652 } |
|
653 else |
|
654 { |
|
655 TRAPD(err,iLocalSkinInstance->ApplyL( activeSkin->FullName(), iSkinItemList )); |
|
656 if (err == EAknsSrvProtected) |
|
657 { |
|
658 ShowErrorNoteL( R_PSLN_QTN_DRM_PREV_RIGHTS_SET ); |
|
659 } |
|
660 else if (err == KErrCorrupt) |
|
661 { |
|
662 //Skin corrupt |
|
663 ShowErrorNoteL( R_PSLN_QTN_SKINS_ERROR_CORRUPTED ); |
|
664 //Preview the active skin |
|
665 TRAP_IGNORE(iLocalSkinInstance->ApplyL( |
|
666 iModel->VisibleSkin(iModel->ActiveSkinIndex())->FullName(), |
|
667 iSkinItemList )); |
|
668 SetCurrentItemIndex( iModel->ActiveSkinIndex() + modifier); |
|
669 if ( iMSKObserver ) |
|
670 { |
|
671 iMSKObserver->CheckMiddleSoftkeyLabelL(); |
|
672 } |
|
673 } |
|
674 else |
|
675 { |
|
676 User::LeaveIfError(err); |
|
677 } |
|
678 } |
|
679 |
|
680 // This is needed to make the list effects update |
|
681 CAknListLoader::InvalidateAll(); |
|
682 |
|
683 if( PslnFeatures::IsSupported( KPslnSupportFastPreviewTheme ) ) |
|
684 { |
|
685 iPreviewIdle->Start( |
|
686 iPreviewDelayTime, |
|
687 iPreviewIntervalTime, |
|
688 TCallBack( DoHandleEffectEndL, this ) ); |
|
689 } |
|
690 else |
|
691 { |
|
692 iPreviewIdle->Start( |
|
693 KIdlePreviewDelay, |
|
694 KIdlePreviewInterval, |
|
695 TCallBack( DoHandleEffectEndL, this ) ); |
|
696 } |
|
697 } |
|
698 } |
|
699 |
|
700 // --------------------------------------------------------------------------- |
|
701 // Handle effect end. |
|
702 // --------------------------------------------------------------------------- |
|
703 // |
|
704 void CPslnGeneralThemeContainer::HandleEffectEndL() |
|
705 { |
|
706 // First stop timer. |
|
707 iPreviewIdle->Cancel(); |
|
708 static_cast<CPslnUi*>( ControlEnv()->AppUi() )-> |
|
709 ToggleScreenBlankerL( EFalse, EFalse ); |
|
710 iObserver->HandlePreviewStateChange( EFalse ); |
|
711 } |
|
712 |
|
713 |
|
714 |
|
715 // --------------------------------------------------------------------------- |
|
716 // Restart Quick Preview |
|
717 // --------------------------------------------------------------------------- |
|
718 // |
|
719 void CPslnGeneralThemeContainer::RestartQuickPreviewL() |
|
720 { |
|
721 TInt modifier = IsEmbeddedLinkVisible(); |
|
722 TInt activeSkinIndex = iListBox->CurrentItemIndex() - modifier; |
|
723 if( iModel->IsThemeOnMemoryCard(activeSkinIndex) ) |
|
724 { |
|
725 HandleIdleTimeL(); |
|
726 } |
|
727 } |
|
728 |
|
729 // --------------------------------------------------------------------------- |
|
730 // Get Preview Skin Index |
|
731 // --------------------------------------------------------------------------- |
|
732 // |
|
733 TInt CPslnGeneralThemeContainer::PreviewSkinIndex() |
|
734 { |
|
735 // Ignore download skin item if it is available. |
|
736 TInt modifier = IsEmbeddedLinkVisible(); |
|
737 TInt previewSkinIndex = iListBox->CurrentItemIndex() - modifier; |
|
738 |
|
739 TBool usbAttached = static_cast<CPslnUi*>( ControlEnv()->AppUi() )->USBAttachState(); |
|
740 |
|
741 if( !iModel->IsValidForPreview(previewSkinIndex) ) |
|
742 { |
|
743 // If skin file on memorycard and usb attached, preview default skin. |
|
744 previewSkinIndex = 0; |
|
745 } |
|
746 else if( iModel->IsThemeOnMemoryCard( previewSkinIndex ) && usbAttached) |
|
747 { |
|
748 // If skin file didn't exist, preview default skin. |
|
749 previewSkinIndex = 0; |
|
750 } |
|
751 return previewSkinIndex; |
|
752 } |
|
753 |
|
754 // --------------------------------------------------------------------------- |
|
755 // Set theme preview state active. |
|
756 // --------------------------------------------------------------------------- |
|
757 // |
|
758 void CPslnGeneralThemeContainer::SetPreviewStateActive() |
|
759 { |
|
760 iObserver->HandlePreviewStateChange( ETrue ); |
|
761 } |
|
762 |
|
763 // --------------------------------------------------------------------------- |
|
764 // Checks if current focus theme is in preview state. |
|
765 // --------------------------------------------------------------------------- |
|
766 // |
|
767 TBool CPslnGeneralThemeContainer::CurrentThemeInPreviewState() |
|
768 { |
|
769 return iListBox->CurrentItemIndex() != iActiveSkinItemIndex; |
|
770 } |
|
771 |
|
772 // ----------------------------------------------------------------------------- |
|
773 // Load preview delay time settings from CenRep. |
|
774 // ----------------------------------------------------------------------------- |
|
775 // |
|
776 void CPslnGeneralThemeContainer::InitPreviewTime() |
|
777 { |
|
778 //load from cenrep |
|
779 iPreviewDelayTime = KErrNone; |
|
780 iPreviewDelayTimeOnHardKey = KErrNone; |
|
781 iPreviewIntervalTime = KErrNone; |
|
782 CRepository* timeRepository = NULL; |
|
783 TRAPD( err, timeRepository = CRepository::NewL( KCRUidThemes ) ); |
|
784 if( err != KErrNone ) |
|
785 { |
|
786 return; |
|
787 } |
|
788 timeRepository->Get( KThemesPreviewDelayTime, iPreviewDelayTime ); |
|
789 timeRepository->Get( KThemesPreviewDelayTimeOnHardKey, iPreviewDelayTimeOnHardKey ); |
|
790 timeRepository->Get( KThemesPreviewIntervalTime, iPreviewIntervalTime ); |
|
791 delete timeRepository; |
|
792 timeRepository = NULL; |
|
793 } |
|
794 |
|
795 // ----------------------------------------------------------------------------- |
|
796 // Show Error Note. |
|
797 // ----------------------------------------------------------------------------- |
|
798 // |
|
799 void CPslnGeneralThemeContainer::ShowErrorNoteL( TInt aResourceId ) |
|
800 { |
|
801 HBufC* errorText = StringLoader::LoadLC(aResourceId); |
|
802 CAknErrorNote * note = new(ELeave) CAknErrorNote (EFalse); |
|
803 note->ExecuteLD(*errorText); |
|
804 CleanupStack::PopAndDestroy(errorText); |
|
805 } |
|
806 |
|
807 // ----------------------------------------------------------------------------- |
|
808 // Handle Pointer Event. |
|
809 // ----------------------------------------------------------------------------- |
|
810 // |
|
811 void CPslnGeneralThemeContainer::HandlePointerEventL( const TPointerEvent &aPointerEvent ) |
|
812 { |
|
813 // Cancel this kind of preview, in conflict with kinetic scrolling. |
|
814 /* |
|
815 // Launch theme preview when pen up, in case pen is out of listbox. |
|
816 if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) |
|
817 { |
|
818 iObserver->HandlePreviewStateChange( ETrue ); |
|
819 StartThemePreviewL( ETrue ); |
|
820 } |
|
821 */ |
|
822 |
|
823 CCoeControl::HandlePointerEventL( aPointerEvent ); |
|
824 } |
|
825 |
|
826 // End of File |