psln/Src/PslnGeneralThemeContainer.cpp
branchRCL_3
changeset 18 0aa5fbdfbc30
parent 15 08e69e956a8c
equal deleted inserted replaced
16:71dd06cfe933 18:0aa5fbdfbc30
    21 #include <aknlists.h>
    21 #include <aknlists.h>
    22 #include <eikclbd.h>
    22 #include <eikclbd.h>
    23 #include <StringLoader.h>
    23 #include <StringLoader.h>
    24 #include <AknGlobalNote.h>
    24 #include <AknGlobalNote.h>
    25 
    25 
    26 #include <aknlocalskinlib.h>
       
    27 #include <aknlistloadertfx.h>
    26 #include <aknlistloadertfx.h>
    28 
    27 
    29 #include <aknnotewrappers.h> 
    28 #include <aknnotewrappers.h> 
    30 
    29 
    31 // Resources.
    30 // Resources.
    55 
    54 
    56 // Framework
    55 // Framework
    57 #include <pslnfwiconhelper.h>
    56 #include <pslnfwiconhelper.h>
    58 #include <mpslnfwmsklabelobserver.h>
    57 #include <mpslnfwmsklabelobserver.h>
    59 
    58 
    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 ===============================
    59 // ============================ MEMBER FUNCTIONS ===============================
    67 // -----------------------------------------------------------------------------
    60 // -----------------------------------------------------------------------------
    68 // C++ default constructor can NOT contain any code, that might leave.
    61 // C++ default constructor can NOT contain any code, that might leave.
    69 // -----------------------------------------------------------------------------
    62 // -----------------------------------------------------------------------------
    70 //
    63 //
    77 // -----------------------------------------------------------------------------
    70 // -----------------------------------------------------------------------------
    78 //
    71 //
    79 void CPslnGeneralThemeContainer::ConstructL( const TRect& aRect )
    72 void CPslnGeneralThemeContainer::ConstructL( const TRect& aRect )
    80     {
    73     {
    81     iListBox = new (ELeave) CAknSingleGraphicStyleListBox;
    74     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 );
    75     BaseConstructL( aRect, R_PSLN_SKIN_LIST_VIEW_TITLE, KPslnNoResource );
    94     iOldSkinNum = iModel->NumberOfSkins();
    76     iOldSkinNum = iModel->NumberOfSkins();
    95     }
    77     }
    96 
    78 
    97 // Destructor
    79 // Destructor
    98 CPslnGeneralThemeContainer::~CPslnGeneralThemeContainer()
    80 CPslnGeneralThemeContainer::~CPslnGeneralThemeContainer()
    99     {
    81     {
   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     }
    82     }
   120 
    83 
   121 // ---------------------------------------------------------------------------
    84 // ---------------------------------------------------------------------------
   122 // Checks if embedded browser is supported.
    85 // Checks if embedded browser is supported.
   123 // ---------------------------------------------------------------------------
    86 // ---------------------------------------------------------------------------
   161 // Creates listbox.
   124 // Creates listbox.
   162 // -----------------------------------------------------------------------------
   125 // -----------------------------------------------------------------------------
   163 //
   126 //
   164 void CPslnGeneralThemeContainer::ConstructListBoxL( TInt /*aResLbxId*/ )
   127 void CPslnGeneralThemeContainer::ConstructListBoxL( TInt /*aResLbxId*/ )
   165     {
   128     {
   166     iListBox->DisableSingleClick( ETrue );
       
   167     UpdateSkinListItemsL( KErrNotFound );
   129     UpdateSkinListItemsL( KErrNotFound );
   168     }
   130     }
   169 
   131 
   170 // -----------------------------------------------------------------------------
   132 // -----------------------------------------------------------------------------
   171 // Empty implementation of inherited method.
   133 // Empty implementation of inherited method.
   297         SetCurrentItemIndex( currentlyActiveSkinIndex + downloadAdded );
   259         SetCurrentItemIndex( currentlyActiveSkinIndex + downloadAdded );
   298         }
   260         }
   299     iListBox->HandleItemAdditionL();
   261     iListBox->HandleItemAdditionL();
   300     if ( iOldSkinNum != maxSkinIndex )
   262     if ( iOldSkinNum != maxSkinIndex )
   301         {
   263         {
   302         StartThemePreviewL();
       
   303         iOldSkinNum = maxSkinIndex;
   264         iOldSkinNum = maxSkinIndex;
   304         }
   265         }
   305     PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::CreateListBoxItemsL END");
   266     PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::CreateListBoxItemsL END");
   306     }
   267     }
   307 
   268 
   320         iListBox );
   281         iListBox );
   321     CleanupStack::PopAndDestroy( iconHelper );
   282     CleanupStack::PopAndDestroy( iconHelper );
   322     }
   283     }
   323 
   284 
   324 // ---------------------------------------------------------------------------
   285 // ---------------------------------------------------------------------------
   325 // Starts theme preview.
       
   326 // ---------------------------------------------------------------------------
       
   327 //
       
   328 void CPslnGeneralThemeContainer::StartThemePreviewL( TBool aTouch )
       
   329     {    
       
   330     // Start timer with 0.5s delay.
       
   331     iPreviewIdle->Cancel();
       
   332     
       
   333     if( PslnFeatures::IsSupported( KPslnSupportFastPreviewTheme ) )
       
   334         {
       
   335         iPreviewIdle->Start( 
       
   336             aTouch ? iPreviewDelayTime : iPreviewDelayTimeOnHardKey, 
       
   337             iPreviewIntervalTime, 
       
   338             TCallBack( DoHandleIdleTimeL, this ) );
       
   339         }
       
   340     else
       
   341         {
       
   342         iPreviewIdle->Start( 
       
   343             KIdlePreviewDelay, 
       
   344             KIdlePreviewInterval, 
       
   345             TCallBack( DoHandleIdleTimeL, this ) );
       
   346         }
       
   347     }
       
   348     
       
   349 // ---------------------------------------------------------------------------
       
   350 // Cancel theme preview.
       
   351 // ---------------------------------------------------------------------------
       
   352 //
       
   353 void CPslnGeneralThemeContainer::CancelThemePreviewL()
       
   354     {   
       
   355     iPreviewIdle->Cancel();
       
   356     }
       
   357 
       
   358 // ---------------------------------------------------------------------------
       
   359 // Sets theme preview observer.
       
   360 // ---------------------------------------------------------------------------
       
   361 //
       
   362 void CPslnGeneralThemeContainer::SetThemePreviewObserver( 
       
   363     MPslnThemePreviewObserver* aObserver )
       
   364     {
       
   365     iObserver = aObserver;
       
   366     }
       
   367 
       
   368 // ---------------------------------------------------------------------------
       
   369 // Locks up and down key events.
       
   370 // ---------------------------------------------------------------------------
       
   371 //
       
   372 void CPslnGeneralThemeContainer::LockUpAndDownKeys( const TBool& aLocked )
       
   373     {
       
   374     TRAPD( transitionEffectsValue, iModel->GetTransitionEffectStateL() );
       
   375     // Effects are enabled if value is NOT KMaxTInt.
       
   376     // Only lock keys, if transition effects are off.
       
   377     if( transitionEffectsValue == KMaxTInt ) 
       
   378         {        
       
   379         iLockedKeys = aLocked;
       
   380         }
       
   381     }
       
   382 
       
   383 // ---------------------------------------------------------------------------
       
   384 // Gets help context for Help application.
   286 // Gets help context for Help application.
   385 // ---------------------------------------------------------------------------
   287 // ---------------------------------------------------------------------------
   386 //
   288 //
   387 void CPslnGeneralThemeContainer::GetHelpContext(
   289 void CPslnGeneralThemeContainer::GetHelpContext(
   388     TCoeHelpContext& aContext ) const
   290     TCoeHelpContext& aContext ) const
   389     {
   291     {
   390     aContext.iMajor = KUidPsln;
   292     aContext.iMajor = KUidPsln;
   391     aContext.iContext = KSKINS_HLP_LIST;
   293     aContext.iContext = KSKINS_HLP_LIST;
   392     }
   294     }
   393 
   295 
   394 // ---------------------------------------------------------------------------
       
   395 // Handles key events.
       
   396 // Starts the new preview theme load before passing the event to base class.
       
   397 // ---------------------------------------------------------------------------
       
   398 //
       
   399 TKeyResponse CPslnGeneralThemeContainer::OfferKeyEventL(
       
   400     const TKeyEvent& aKeyEvent, 
       
   401     TEventCode aType )
       
   402     {
       
   403     TKeyResponse resp = EKeyWasConsumed;
       
   404 
       
   405     // If lock is active, ignore up and down key events.
       
   406     if ( iLockedKeys &&
       
   407          !( aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow ) ||
       
   408         !iLockedKeys )
       
   409         {
       
   410         resp = CPslnBaseContainer::OfferKeyEventL( aKeyEvent, aType );
       
   411         }
       
   412     
       
   413        // React to up and down arrow key events IF download skin is not selected.
       
   414     if ( aType == EEventKey && 
       
   415          (aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow ) &&
       
   416          !iLockedKeys )
       
   417         {
       
   418         iObserver->HandlePreviewStateChange( ETrue );
       
   419         StartThemePreviewL( EFalse );
       
   420         }
       
   421 
       
   422     return resp;
       
   423     }
       
   424 
       
   425 // ---------------------------------------------------------------------------
       
   426 // Creates the skin item list for local item skinning.
       
   427 // ---------------------------------------------------------------------------
       
   428 //
       
   429 void CPslnGeneralThemeContainer::CreateSkinItemList()
       
   430     {
       
   431     PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::CreateSkinItemList" );
       
   432     TInt retVal = KErrNone;
       
   433 
       
   434     // Main area, screen, status pane and control pane.
       
   435     retVal += AddItemToList( KAknsIIDQsnBgScreen );
       
   436     //retVal += AddItemToList( KAknsIIDQsnBgAreaMainListGene );
       
   437     retVal += AddItemToList( KAknsIIDQsnBgAreaStaconRt );
       
   438     retVal += AddItemToList( KAknsIIDQsnBgAreaStaconLt );
       
   439     retVal += AddItemToList( KAknsIIDQsnBgAreaStaconRb );
       
   440     retVal += AddItemToList( KAknsIIDQsnBgAreaStaconLb );
       
   441     retVal += AddItemToList( KAknsIIDQsnBgAreaControl );
       
   442     retVal += AddItemToList( KAknsIIDQsnBgAreaControlPopup );
       
   443     retVal += AddItemToList( KAknsIIDQsnBgAreaStatus );
       
   444     retVal += AddItemToList( KAknsIIDQsnFrStatusFlat );
       
   445     retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCornerTl );
       
   446     retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCornerTr );
       
   447     retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCornerBl );
       
   448     retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCornerBr );
       
   449     retVal += AddItemToList( KAknsIIDQsnFrStatusFlatSideT );
       
   450     retVal += AddItemToList( KAknsIIDQsnFrStatusFlatSideB );
       
   451     retVal += AddItemToList( KAknsIIDQsnFrStatusFlatSideL );
       
   452     retVal += AddItemToList( KAknsIIDQsnFrStatusFlatSideR );
       
   453     retVal += AddItemToList( KAknsIIDQsnFrStatusFlatCenter );
       
   454 
       
   455     // Navipane
       
   456     retVal += AddItemToList( KAknsIIDQsnBgNavipaneSolid );
       
   457     retVal += AddItemToList( KAknsIIDQsnBgNavipaneWipe );
       
   458     retVal += AddItemToList( KAknsIIDQgnIndiNaviArrowLeft );
       
   459     retVal += AddItemToList( KAknsIIDQgnIndiNaviArrowRight );
       
   460 
       
   461     // Battery pane, signal pane
       
   462     retVal += AddItemToList( KAknsIIDQgnIndiSignalStrength );
       
   463     retVal += AddItemToList( KAknsIIDQgnIndiBatteryStrength );
       
   464 
       
   465     // Scrollbars
       
   466     retVal += AddItemToList( KAknsIIDQsnCpScrollBgTop );
       
   467     retVal += AddItemToList( KAknsIIDQsnCpScrollBgMiddle );
       
   468     retVal += AddItemToList( KAknsIIDQsnCpScrollBgBottom );
       
   469     retVal += AddItemToList( KAknsIIDQsnCpScrollHandleBgTop );
       
   470     retVal += AddItemToList( KAknsIIDQsnCpScrollHandleBgMiddle );
       
   471     retVal += AddItemToList( KAknsIIDQsnCpScrollHandleBgBottom );
       
   472     retVal += AddItemToList( KAknsIIDQsnCpScrollHandleTop );
       
   473     retVal += AddItemToList( KAknsIIDQsnCpScrollHandleMiddle );
       
   474     retVal += AddItemToList( KAknsIIDQsnCpScrollHandleBottom );
       
   475 
       
   476     // Tabs
       
   477     retVal += AddItemToList( KAknsIIDQgnGrafTabActiveL );
       
   478     retVal += AddItemToList( KAknsIIDQgnGrafTabActiveM );
       
   479     retVal += AddItemToList( KAknsIIDQgnGrafTabActiveR );
       
   480     retVal += AddItemToList( KAknsIIDQgnGrafTabPassiveL );
       
   481     retVal += AddItemToList( KAknsIIDQgnGrafTabPassiveM );
       
   482     retVal += AddItemToList( KAknsIIDQgnGrafTabPassiveR );    
       
   483 
       
   484     // Highlight
       
   485     retVal += AddItemToList( KAknsIIDQsnFrList );
       
   486     retVal += AddItemToList( KAknsIIDQsnFrListCornerTl );
       
   487     retVal += AddItemToList( KAknsIIDQsnFrListCornerTr );
       
   488     retVal += AddItemToList( KAknsIIDQsnFrListCornerBl );
       
   489     retVal += AddItemToList( KAknsIIDQsnFrListCornerBr );
       
   490     retVal += AddItemToList( KAknsIIDQsnFrListSideT );
       
   491     retVal += AddItemToList( KAknsIIDQsnFrListSideB );
       
   492     retVal += AddItemToList( KAknsIIDQsnFrListSideL );
       
   493     retVal += AddItemToList( KAknsIIDQsnFrListSideR );
       
   494     retVal += AddItemToList( KAknsIIDQsnFrListCenter );
       
   495 
       
   496     // Options menu
       
   497     retVal += AddItemToList( KAknsIIDQsnFrPopup );
       
   498     retVal += AddItemToList( KAknsIIDQsnFrPopupCornerTl );
       
   499     retVal += AddItemToList( KAknsIIDQsnFrPopupCornerTr );
       
   500     retVal += AddItemToList( KAknsIIDQsnFrPopupCornerBl );
       
   501     retVal += AddItemToList( KAknsIIDQsnFrPopupCornerBr );
       
   502     retVal += AddItemToList( KAknsIIDQsnFrPopupSideT );
       
   503     retVal += AddItemToList( KAknsIIDQsnFrPopupSideB );
       
   504     retVal += AddItemToList( KAknsIIDQsnFrPopupSideL );
       
   505     retVal += AddItemToList( KAknsIIDQsnFrPopupSideR );
       
   506     retVal += AddItemToList( KAknsIIDQsnFrPopupCenter );
       
   507     retVal += AddItemToList( KAknsIIDQsnFrPopupSub );
       
   508     retVal += AddItemToList( KAknsIIDQsnFrPopupSubCornerTl );
       
   509     retVal += AddItemToList( KAknsIIDQsnFrPopupSubCornerTr );
       
   510     retVal += AddItemToList( KAknsIIDQsnFrPopupSubCornerBl );
       
   511     retVal += AddItemToList( KAknsIIDQsnFrPopupSubCornerBr );
       
   512     retVal += AddItemToList( KAknsIIDQsnFrPopupSubSideT );
       
   513     retVal += AddItemToList( KAknsIIDQsnFrPopupSubSideB );
       
   514     retVal += AddItemToList( KAknsIIDQsnFrPopupSubSideL );
       
   515     retVal += AddItemToList( KAknsIIDQsnFrPopupSubSideR );
       
   516     retVal += AddItemToList( KAknsIIDQsnFrPopupCenterSubmenu );
       
   517     retVal += AddItemToList( KAknsIIDQgnIndiSubmenu );
       
   518 
       
   519     // Icons
       
   520     retVal += AddItemToList( KAknsIIDQgnPropPslnActive );
       
   521     retVal += AddItemToList( KAknsIIDQgnIndiMmcAdd );
       
   522 
       
   523     // QHD specific CBA.    
       
   524     retVal += AddItemToList( KAknsIIDQgnIndiSctrlMaskInactLsc );
       
   525     retVal += AddItemToList( KAknsIIDQgnIndiSctrlMaskActLsc );
       
   526     retVal += AddItemToList( KAknsIIDQgnFrSctrlButton );
       
   527     retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCornerTl );
       
   528     retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCornerTr );
       
   529     retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCornerBl );
       
   530     retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCornerBr );
       
   531     retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonSideT );
       
   532     retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonSideB );
       
   533     retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonSideL );
       
   534     retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonSideR );
       
   535     retVal += AddItemToList( KAknsIIDQgnFrSctrlButtonCenter );
       
   536     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButton  );
       
   537     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCornerTl );
       
   538     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCornerTr );
       
   539     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCornerBl );
       
   540     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCornerBr );
       
   541     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonSideT );
       
   542     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonSideB );
       
   543     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonSideL );
       
   544     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonSideR );
       
   545     retVal += AddItemToList( KAknsIIDQgnFrSctrlSkButtonCenter );
       
   546 
       
   547     __ASSERT_DEBUG( retVal == KErrNone, User::Panic(_L("Error in inserting"), 1) );
       
   548     }
       
   549 
       
   550 // ---------------------------------------------------------------------------
       
   551 // Adds one item to skin item list.
       
   552 // ---------------------------------------------------------------------------
       
   553 //
       
   554 TInt CPslnGeneralThemeContainer::AddItemToList( const TAknsItemID& aSkinID )
       
   555     {
       
   556     TAknsItemID skinItem;
       
   557     skinItem.Set( aSkinID.iMajor, aSkinID.iMinor );
       
   558     TInt error = iSkinItemList.InsertInOrder( skinItem, TAknsItemID::LinearOrder );
       
   559     PSLN_TRACE_DEBUG3("CPslnGeneralThemeContainer::AddItemToList item=%d %d added %d", 
       
   560         aSkinID.iMajor, aSkinID.iMinor, error );
       
   561     return error;
       
   562     }
       
   563 
       
   564 // -----------------------------------------------------------------------------
       
   565 // Callback function when application is idle.
       
   566 // -----------------------------------------------------------------------------
       
   567 //
       
   568 TInt CPslnGeneralThemeContainer::DoHandleIdleTimeL( TAny* aAny )
       
   569     {
       
   570     static_cast< CPslnGeneralThemeContainer* >( aAny )->HandleIdleTimeL();
       
   571     return KErrNone;
       
   572     }
       
   573 
       
   574 // -----------------------------------------------------------------------------
       
   575 // Callback function when application is idle.
       
   576 // -----------------------------------------------------------------------------
       
   577 //
       
   578 TInt CPslnGeneralThemeContainer::DoHandleEffectEndL( TAny* aAny )
       
   579     {
       
   580     static_cast< CPslnGeneralThemeContainer* >( aAny )->HandleEffectEndL();
       
   581     return KErrNone;
       
   582     }
       
   583 
       
   584 // -----------------------------------------------------------------------------
       
   585 // Handle idle time.
       
   586 // -----------------------------------------------------------------------------
       
   587 //
       
   588 void CPslnGeneralThemeContainer::HandleIdleTimeL()
       
   589     {
       
   590     PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::HandleIdleTimeL" );
       
   591     // First stop timer.
       
   592     iPreviewIdle->Cancel();
       
   593     
       
   594     // No re-preview the same theme
       
   595     if( iActiveSkinItemIndex == iListBox->CurrentItemIndex() )
       
   596         {
       
   597         return;
       
   598         }
       
   599 
       
   600     // Check free mem
       
   601     TInt freeMem = 0;
       
   602     HAL::Get( HALData::EMemoryRAMFree , freeMem );
       
   603     if( freeMem <= KPslnMinMemSize )
       
   604         {
       
   605         HBufC* errorBuf = StringLoader::LoadLC(
       
   606             R_PSLN_QTN_MEMLO_RAM_OUT_OF_MEM );
       
   607         // Display global note.
       
   608         CAknGlobalNote* errorNote = CAknGlobalNote::NewLC();
       
   609         errorNote->ShowNoteL( EAknGlobalErrorNote, *errorBuf );
       
   610         CleanupStack::PopAndDestroy( 2 ); // errorNote & errorBuf
       
   611         return;
       
   612         }
       
   613 
       
   614     iActiveSkinItemIndex = iListBox->CurrentItemIndex();
       
   615     // Ignore download skin item if it is available.
       
   616     TInt modifier = IsEmbeddedLinkVisible();
       
   617     TInt activeSkinIndex = iActiveSkinItemIndex - modifier;
       
   618     
       
   619     TBool usbAttached = static_cast<CPslnUi*>( ControlEnv()->AppUi() )->USBAttachState();
       
   620             
       
   621     if( iModel->IsValidForPreview(activeSkinIndex) == EFalse )
       
   622         {
       
   623         // If skin file didn't valid, preview active skin.
       
   624         activeSkinIndex = iModel->ActiveSkinIndex();
       
   625         }
       
   626     if ( IsEmbeddedLinkVisible() && iListBox->CurrentItemIndex() == 0 )
       
   627         {
       
   628         activeSkinIndex = iModel->ActiveSkinIndex();
       
   629         }
       
   630     if( iModel->IsThemeOnMemoryCard( activeSkinIndex ) && usbAttached)
       
   631         {
       
   632         activeSkinIndex = 0;
       
   633         }
       
   634     
       
   635     CPslnSkinEntry* activeSkin = iModel->VisibleSkin( activeSkinIndex );
       
   636     
       
   637     if ( activeSkin )
       
   638         {
       
   639         // Re-create the list, since skin preview library removes skinned items
       
   640         // from used list (performance reasons).
       
   641         iSkinItemList.Reset();
       
   642         CreateSkinItemList();        
       
   643         PSLN_TRACE_DEBUG("CPslnGeneralThemeContainer::HandleIdleTimeL Create Preview" );
       
   644         static_cast<CPslnUi*>( ControlEnv()->AppUi() )->ToggleScreenBlankerL( ETrue, ETrue, EFalse );
       
   645 
       
   646         if ( iModel->IsActiveSkinSelected( activeSkinIndex  ) )
       
   647             {            
       
   648             // Remove locally skinned items.
       
   649             MAknsSkinInstance* si = AknsUtils::SkinInstance();
       
   650             if ( si )
       
   651                 {        
       
   652                 si->SetChangeEventsEnabled( EFalse );
       
   653                 si->RemoveLocalItemDefs();
       
   654                 si->SetChangeEventsEnabled( ETrue );
       
   655                 }
       
   656             }
       
   657         else
       
   658             {   
       
   659             TRAPD(err,iLocalSkinInstance->ApplyL( activeSkin->FullName(), iSkinItemList ));
       
   660             if (err == EAknsSrvProtected)
       
   661                 {            
       
   662                 ShowErrorNoteL( R_PSLN_QTN_DRM_PREV_RIGHTS_SET );
       
   663                 }
       
   664             else if (err == KErrCorrupt)
       
   665                 {
       
   666                 //Skin corrupt
       
   667                 ShowErrorNoteL( R_PSLN_QTN_SKINS_ERROR_CORRUPTED );
       
   668                 //Preview the active skin
       
   669                 TRAP_IGNORE(iLocalSkinInstance->ApplyL( 
       
   670                                 iModel->VisibleSkin(iModel->ActiveSkinIndex())->FullName(),
       
   671                                 iSkinItemList ));
       
   672                 SetCurrentItemIndex( iModel->ActiveSkinIndex() + modifier);
       
   673                 if ( iMSKObserver )
       
   674                     {
       
   675                     iMSKObserver->CheckMiddleSoftkeyLabelL();
       
   676                     }
       
   677                 }
       
   678             else
       
   679                 {
       
   680                 User::LeaveIfError(err);    
       
   681                 }        
       
   682             }
       
   683 
       
   684         // This is needed to make the list effects update
       
   685         CAknListLoader::InvalidateAll();
       
   686 
       
   687         if( PslnFeatures::IsSupported( KPslnSupportFastPreviewTheme ) )
       
   688             {
       
   689             iPreviewIdle->Start( 
       
   690                 iPreviewDelayTime, 
       
   691                 iPreviewIntervalTime, 
       
   692                 TCallBack( DoHandleEffectEndL, this ) );
       
   693             }
       
   694         else
       
   695             {
       
   696             iPreviewIdle->Start( 
       
   697                 KIdlePreviewDelay, 
       
   698                 KIdlePreviewInterval, 
       
   699                 TCallBack( DoHandleEffectEndL, this ) );
       
   700             }
       
   701         }
       
   702     }
       
   703 
       
   704 // ---------------------------------------------------------------------------
       
   705 // Handle effect end.
       
   706 // ---------------------------------------------------------------------------
       
   707 //
       
   708 void CPslnGeneralThemeContainer::HandleEffectEndL()
       
   709     {
       
   710     // First stop timer.
       
   711     iPreviewIdle->Cancel();
       
   712     static_cast<CPslnUi*>( ControlEnv()->AppUi() )->
       
   713         ToggleScreenBlankerL( EFalse, EFalse );
       
   714     iObserver->HandlePreviewStateChange( EFalse );
       
   715     }
       
   716 
       
   717 
       
   718     
       
   719 // ---------------------------------------------------------------------------
       
   720 // Restart Quick Preview
       
   721 // ---------------------------------------------------------------------------
       
   722 //
       
   723 void CPslnGeneralThemeContainer::RestartQuickPreviewL()
       
   724     {
       
   725     TInt modifier = IsEmbeddedLinkVisible();
       
   726     TInt activeSkinIndex = iListBox->CurrentItemIndex() - modifier;
       
   727     if( iModel->IsThemeOnMemoryCard(activeSkinIndex) )
       
   728         {
       
   729         HandleIdleTimeL();
       
   730         }
       
   731     }
       
   732     
       
   733 // ---------------------------------------------------------------------------
       
   734 // Get Preview Skin Index
       
   735 // ---------------------------------------------------------------------------
       
   736 //    
       
   737 TInt CPslnGeneralThemeContainer::PreviewSkinIndex()
       
   738     {
       
   739     // Ignore download skin item if it is available.
       
   740     TInt modifier = IsEmbeddedLinkVisible();
       
   741     TInt previewSkinIndex = iListBox->CurrentItemIndex() - modifier;
       
   742     
       
   743     TBool usbAttached = static_cast<CPslnUi*>( ControlEnv()->AppUi() )->USBAttachState();
       
   744     
       
   745     if( !iModel->IsValidForPreview(previewSkinIndex) )
       
   746         {
       
   747         // If skin file on memorycard and usb attached, preview default skin.
       
   748         previewSkinIndex = 0;
       
   749         }
       
   750     else if( iModel->IsThemeOnMemoryCard( previewSkinIndex ) && usbAttached)
       
   751         {
       
   752         // If skin file didn't exist, preview default skin.
       
   753         previewSkinIndex = 0;
       
   754         }
       
   755     return previewSkinIndex;
       
   756     }
       
   757 
       
   758 // ---------------------------------------------------------------------------
       
   759 // Set theme preview state active.
       
   760 // ---------------------------------------------------------------------------
       
   761 //
       
   762 void CPslnGeneralThemeContainer::SetPreviewStateActive()
       
   763     {
       
   764     iObserver->HandlePreviewStateChange( ETrue );
       
   765     }
       
   766     
       
   767 // ---------------------------------------------------------------------------
       
   768 // Checks if current focus theme is in preview state. 
       
   769 // ---------------------------------------------------------------------------
       
   770 //
       
   771 TBool CPslnGeneralThemeContainer::CurrentThemeInPreviewState()
       
   772     {
       
   773     return iListBox->CurrentItemIndex() != iActiveSkinItemIndex;
       
   774     }
       
   775     
       
   776 // -----------------------------------------------------------------------------
       
   777 // Load preview delay time settings from CenRep.
       
   778 // -----------------------------------------------------------------------------
       
   779 //
       
   780 void CPslnGeneralThemeContainer::InitPreviewTime()
       
   781     {
       
   782     //load from cenrep
       
   783     iPreviewDelayTime = KErrNone;
       
   784     iPreviewDelayTimeOnHardKey = KErrNone;
       
   785     iPreviewIntervalTime = KErrNone;
       
   786     CRepository* timeRepository = NULL;
       
   787     TRAPD( err, timeRepository = CRepository::NewL( KCRUidThemes ) );
       
   788     if( err != KErrNone )
       
   789         {
       
   790         return;
       
   791         }
       
   792     timeRepository->Get( KThemesPreviewDelayTime, iPreviewDelayTime ); 
       
   793     timeRepository->Get( KThemesPreviewDelayTimeOnHardKey, iPreviewDelayTimeOnHardKey ); 
       
   794     timeRepository->Get( KThemesPreviewIntervalTime, iPreviewIntervalTime );
       
   795     delete timeRepository;
       
   796     timeRepository = NULL;
       
   797     }
       
   798 
       
   799 // -----------------------------------------------------------------------------
       
   800 // Show Error Note.
       
   801 // -----------------------------------------------------------------------------
       
   802 //
       
   803 void CPslnGeneralThemeContainer::ShowErrorNoteL( TInt  aResourceId ) 
       
   804     {
       
   805     HBufC* errorText = StringLoader::LoadLC(aResourceId);
       
   806     CAknErrorNote * note = new(ELeave) CAknErrorNote (EFalse);
       
   807     note->ExecuteLD(*errorText);
       
   808     CleanupStack::PopAndDestroy(errorText);
       
   809     }
       
   810 
       
   811 // -----------------------------------------------------------------------------
       
   812 // Handle Pointer Event.
       
   813 // -----------------------------------------------------------------------------
       
   814 //
       
   815 void CPslnGeneralThemeContainer::HandlePointerEventL( const TPointerEvent &aPointerEvent )
       
   816     {
       
   817     // Cancel this kind of preview, in conflict with kinetic scrolling.
       
   818 /*
       
   819     // Launch theme preview when pen up, in case pen is out of listbox.
       
   820     if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
       
   821         {
       
   822         iObserver->HandlePreviewStateChange( ETrue );
       
   823         StartThemePreviewL( ETrue );
       
   824         }
       
   825 */
       
   826     
       
   827     CCoeControl::HandlePointerEventL( aPointerEvent );
       
   828     }
       
   829 
       
   830 //  End of File
   296 //  End of File