psln/Src/PslnGeneralThemeView.cpp
changeset 0 2f259fa3e83a
child 18 0aa5fbdfbc30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/psln/Src/PslnGeneralThemeView.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,686 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  General theme view.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+// General - services
+#include <StringLoader.h>
+#include <AknGlobalNote.h>
+#include <aknnotewrappers.h>
+#include <akntitle.h>
+#include <barsread.h>
+#include <eikbtgpc.h>
+#include <eikmenup.h>
+
+// Feature manager.
+#include <featmgr.h>
+#include <features.hrh>
+
+// Power save mode setting
+#include <psmsettings.h>
+
+// Resources
+#include <psln.rsg>
+#include <pslncommon.rsg>
+#include <data_caging_path_literals.hrh>
+
+// Psln specific.
+#include "PslnGeneralThemeView.h"
+#include "PslnConst.h"
+#include "PslnUi.h"
+#include "PslnModel.h"
+#include "PslnFeatures.h"
+#include "PslnDebug.h"
+
+
+// Path to common personalization resources. This resource file is meant for
+// shared resources between application and plugins.
+_LIT( KPslnCommonResourceFileName, "z:pslncommon.rsc" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CPslnGeneralThemeView::CPslnGeneralThemeView()
+    : iResourceLoaderCommon( *iCoeEnv )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::ConstructL()
+    {
+    BaseConstructL( R_PSLN_GENERAL_VIEW );
+
+    iNaviPaneContext = iPslnUi->PslnTabGroup();
+
+    // Find the common resource file:
+    TParse* parse = new (ELeave) TParse;
+    CleanupStack::PushL( parse );
+    parse->Set( KPslnCommonResourceFileName, &KDC_APP_RESOURCE_DIR, NULL );
+    TFileName* fileName = new (ELeave) TFileName( parse->FullName() );
+    CleanupStack::PushL( fileName );
+
+    // Open resource file:
+    iResourceLoaderCommon.OpenL( *fileName );
+
+    CleanupStack::PopAndDestroy( 2, parse ); // fileName, parse
+
+    // Normally download item is the first one.
+    iDownloadItemIndex = 0;
+
+    // If enchanted embedded links are not supported, then there shouldn't be
+    // 'Download' item at all.
+    if ( !PslnFeatures::IsEnhancedEmbeddedLinksSupported() )
+        {
+        iDownloadItemIndex = KErrNotFound;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPslnGeneralThemeView* CPslnGeneralThemeView::NewLC()
+    {
+    CPslnGeneralThemeView* self = new (ELeave) CPslnGeneralThemeView();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// Destructor
+CPslnGeneralThemeView::~CPslnGeneralThemeView()
+    {
+    iResourceLoaderCommon.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CPslnGeneralThemeView::Id
+// -----------------------------------------------------------------------------
+//
+TUid CPslnGeneralThemeView::Id() const
+    {
+    return KPslnGeneralView;
+    }
+
+// -----------------------------------------------------------------------------
+// CPslnGeneralThemeView::HandleCommandL
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::HandleCommandL( TInt aCommand )
+    {
+    // First set active item and active skin.
+    if ( iContainer )
+        {
+        iCurrentItem = iContainer->CurrentItemIndex();
+        }
+    TInt activeSkinIndex = iCurrentItem;
+    if ( iDownloadItemIndex != KErrNotFound )
+        {
+        activeSkinIndex--;
+        }
+    switch ( aCommand )
+        {
+        case EPslnCmdTransitionEffectsActivate:
+            {
+            TInt PsmMode = 0;
+            CPsmSettings *PsmSettings = CPsmSettings::NewL();
+            PsmSettings->GetCurrentMode( PsmMode );
+            delete PsmSettings;
+
+            if ( PsmMode == EPsmsrvModePowerSave ) // PSM on, setting is protected
+                {
+                HBufC* buf = StringLoader::LoadLC( R_PSLN_QTN_PSM_INFONOTE );
+                CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
+                note->ExecuteLD( *buf );
+                CleanupStack::PopAndDestroy( buf );
+                return;
+                }
+
+            TInt error = iModel->SetTransitionEffectsL( EPslnEnableAllEffects );
+            
+            if ( error == KErrNone )
+                {            
+                if ( PslnFeatures::IsSupported( KPslnSupportAnimBackground ) &&
+                     iModel->IsSupportAnimBg(  iModel->ActiveSkinIndex() ) )
+                    {
+                    error = iModel->SetAnimBackground( EPslnEnableAllEffects );
+                    }            
+                }
+            
+            if ( error == KErrNoMemory )
+                {
+                HBufC* errorBuf = StringLoader::LoadLC(
+                    R_PSLN_NOT_ENOUGH_MEMORY );
+                // Display global note.
+                CAknGlobalNote* errorNote = CAknGlobalNote::NewLC();
+                errorNote->ShowNoteL( EAknGlobalErrorNote, *errorBuf );
+                CleanupStack::PopAndDestroy( 2, errorBuf ); // errorNote also
+                }
+            else
+                {
+                User::LeaveIfError( error );
+                }
+            }
+            break;
+        case EPslnCmdTransitionEffectsDeactivate:
+            iModel->SetTransitionEffectsL( EPslnDisableAllEffects );
+            //Deactive AnimBackground
+            iModel->SetAnimBackground( EPslnDisableAllEffects );
+            break;
+        
+        case EPslnCmdAnimBackgroundActivate:
+            {
+            TInt error = iModel->SetAnimBackground( EPslnEnableAllEffects );
+            if ( error == KErrNoMemory )
+                {
+                HBufC* errorBuf = StringLoader::LoadLC(
+                        R_PSLN_NOT_ENOUGH_MEMORY );
+
+                CAknGlobalNote* errorNote = CAknGlobalNote::NewLC();
+                errorNote->ShowNoteL( EAknGlobalErrorNote, *errorBuf );
+                CleanupStack::PopAndDestroy( 2, errorBuf ); // errorNote also
+                }
+            }
+            break;
+        case EPslnCmdAnimBackgroundDeactivate:
+            iModel->SetAnimBackground( EPslnDisableAllEffects );
+            break;        
+        case EPslnCmdEmptyCommand: // Fallthrough
+        case EPslnCmdAppActivate: // Fallthrough
+            {
+            if ( iContainer )
+                {
+                if ( iPreviewMode )
+                    {
+                    //stop preview
+                    iToBeActivatedSkinIndex = activeSkinIndex; 
+                    static_cast<CPslnGeneralThemeContainer*>(iContainer)->
+                        LockUpAndDownKeys( ETrue );
+                    static_cast<CPslnGeneralThemeContainer*>(iContainer)->
+                        CancelThemePreviewL();
+                        
+                    HandlePreviewStateChange( EFalse );
+                    }
+                    
+                if ( iToBeActivatedSkinIndex != KErrNotFound )
+                    {
+                    activeSkinIndex = iToBeActivatedSkinIndex;
+                    iToBeActivatedSkinIndex = -1;
+                    }
+                // Do nothing if active theme is selected.
+                if ( iModel->IsActiveSkinSelected( activeSkinIndex  ) )
+                    {
+                    HandlePreviewStateChange( ETrue );
+                    static_cast<CPslnGeneralThemeContainer*>(iContainer)->
+                        StartThemePreviewL();
+                    break;
+                    }
+                // Check is the theme corrupted.
+                if ( !iModel->IsValidForActivation( activeSkinIndex ) )
+                    {
+                    HBufC* errorBuf = StringLoader::LoadLC(
+                        R_PSLN_QTN_SKINS_ERROR_CORRUPTED );
+                    // Display global note.
+                    CAknGlobalNote* errorNote = CAknGlobalNote::NewLC();
+                    errorNote->ShowNoteL( EAknGlobalErrorNote, *errorBuf );
+                    CleanupStack::PopAndDestroy( 2, errorBuf ); // errorNote also
+                    return;
+                    }
+                else
+                    {
+                    iModel->SetCurrentSelectedSkinIndex( activeSkinIndex );
+                    }
+                static_cast<CPslnGeneralThemeContainer*>(iContainer)->
+                    LockUpAndDownKeys( EFalse );
+                }
+            }
+        case EPslnCmdAppDownload: // Fallthrough
+        default:
+            iPslnUi->HandleCommandL( aCommand );
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPslnGeneralThemeView::UpdateSkinListItemsL()
+// ---------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::UpdateSkinListItemsL( TInt aCurrentIndex )
+    {
+    PSLN_TRACE_DEBUG("CPslnGeneralThemeView::UpdateSkinListItemsL");
+    if ( iContainer )
+        {
+        if ( aCurrentIndex == KErrNotFound )
+            {
+            aCurrentIndex = iContainer->CurrentItemIndex();
+            }
+        static_cast<CPslnGeneralThemeContainer*>(iContainer)->
+            UpdateSkinListItemsL( aCurrentIndex );
+        }
+    CheckMiddleSoftkeyLabelL();
+    }
+
+// -----------------------------------------------------------------------------
+// CPslnGeneralThemeView::DoActivateL
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::DoActivateL(
+            const TVwsViewId& aPrevViewId,
+            TUid aCustomMessageId,
+            const TDesC8& aCustomMessage )
+    {
+    PSLN_TRACE_DEBUG("CPslnGeneralThemeView::DoActivateL");
+
+    CPslnBaseView::DoActivateL(
+        aPrevViewId,
+        aCustomMessageId,
+        aCustomMessage );
+
+    // If view is directly activated (not through main view), update
+    // tab group (and main view's active folder). The static views
+    // have same UID as their tab index.
+    if ( aPrevViewId.iAppUid != KUidPsln )
+        {
+        iPslnUi->UpdateTabIndex(
+            KPslnGeneralView.iUid,
+            KPslnGeneralView.iUid );
+        }
+
+    // Update skin list.
+    // Set active index and update container.
+    TInt currentlySelected  = iModel->ActiveSkinIndex();
+    iModel->SetCurrentSelectedSkinIndex( currentlySelected );
+
+    CheckMiddleSoftkeyLabelL();
+
+    iPslnUi->ToggleScreenBlankerL( EFalse, EFalse );
+    iToBeActivatedSkinIndex = -1;
+    }
+
+// -----------------------------------------------------------------------------
+// CPslnGeneralThemeView::DoDeactivate
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::DoDeactivate()
+    {
+    PSLN_TRACE_DEBUG("CPslnGeneralThemeView::DoDeactivate");
+    RemoveCommandFromMSK();
+    CPslnBaseView::DoDeactivate();
+    }
+
+// -----------------------------------------------------------------------------
+// CPslnGeneralThemeView::DynInitMenuPaneL
+//
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::DynInitMenuPaneL(
+    TInt aResourceId, CEikMenuPane* aMenuPane )
+    {
+    PSLN_TRACE_DEBUG("CPslnGeneralThemeView::DynInitMenuPaneL");
+    if( aResourceId == R_PSLN_GEN_VIEW_MENUPANE )
+        {
+        if ( iContainer )
+            {
+            iCurrentItem = iContainer->CurrentItemIndex();
+            }
+
+        TBool downloadExists = ETrue;
+        // Download theme is not selected, or it is not supported.
+        if ( iDownloadItemIndex == KErrNotFound )
+            {
+            // Download item is not supported.
+            aMenuPane->SetItemDimmed( EPslnCmdAppDownload, ETrue );
+            downloadExists = EFalse;
+            }
+        else if ( iCurrentItem != iDownloadItemIndex )
+            {
+            // Download is supported, but is not selected.
+            aMenuPane->SetItemDimmed( EPslnCmdAppDownload, ETrue );
+            downloadExists = ETrue;
+            }
+        else
+            {
+            aMenuPane->SetItemDimmed( EPslnCmdAppActivate, ETrue );
+            }
+
+        // Update current item index in model.
+        // Possibly reduce by one, since UI might show Download item.
+        TInt skinIndex = iCurrentItem - (TInt) downloadExists;
+        iModel->SetCurrentSelectedSkinIndex( skinIndex );
+
+        if( iModel->IsActiveSkinSelected() ||
+           !iModel->IsValidForActivation( skinIndex ) )
+            {
+            aMenuPane->SetItemDimmed( EPslnCmdAppActivate, ETrue );
+            }
+        }
+    else if ( aResourceId == R_PSLN_TRANSITION_EFFECTS_MENU_PANE )
+        {
+        if ( ( iCurrentItem == iDownloadItemIndex &&
+             iDownloadItemIndex != KErrNotFound ) ||
+            !FeatureManager::FeatureSupported(KFeatureIdUiTransitionEffects) )
+            {
+            // Remove Transition Effects when Download is highlighted.
+            aMenuPane->SetItemDimmed( EPslnCmdTransitionEffectsSubMenuOpen, ETrue );
+            }
+        }
+    else if ( aResourceId == R_PSLN_TRANSITION_EFFECTS_CASCADE_MENU )
+        {
+        // Do nothing with cascade menu values, if Download is highlighted.
+        if ( iCurrentItem != iDownloadItemIndex ||
+             iDownloadItemIndex != KErrNotFound )
+            {
+            TInt transitionEffectsValue = iModel->GetTransitionEffectStateL();
+            // Effects are enabled if value is NOT KMaxTInt.
+            if( transitionEffectsValue != KMaxTInt )
+                {
+                aMenuPane->SetItemButtonState(
+                    EPslnCmdTransitionEffectsActivate,
+                    EEikMenuItemSymbolOn );
+                aMenuPane->SetItemButtonState(
+                    EPslnCmdTransitionEffectsDeactivate,
+                    EEikMenuItemSymbolIndeterminate );
+                }
+            else
+                {
+                aMenuPane->SetItemButtonState(
+                    EPslnCmdTransitionEffectsActivate,
+                    EEikMenuItemSymbolIndeterminate );
+                aMenuPane->SetItemButtonState(
+                    EPslnCmdTransitionEffectsDeactivate,
+                    EEikMenuItemSymbolOn );
+                }
+            }
+        }
+    else if ( aResourceId == R_PSLN_ANIM_BACKGROUND_MENU_PANE )
+        {
+        TBool downloadExists = ETrue;
+        if ( iDownloadItemIndex == KErrNotFound )
+            {
+            downloadExists = EFalse;
+            }
+        TInt skinIndex = iCurrentItem - (TInt) downloadExists;
+		
+        if ( ( iCurrentItem != iDownloadItemIndex &&
+             iDownloadItemIndex != KErrNotFound )||
+             !iModel->IsActiveSkinSelected() ||
+             !PslnFeatures::IsSupported( KPslnSupportAnimBackground ) ||
+             !iModel->IsSupportAnimBg(skinIndex))
+            {
+            aMenuPane->SetItemDimmed( EPslnCmdAnimBackgroundSubMenuOpen, ETrue );
+            }
+        }
+    else if ( aResourceId == R_PSLN_ANIM_BACKGROUND_CASCADE_MENU )
+        {
+        // Do nothing with cascade menu values, if Download is highlighted.
+        if ( iCurrentItem != iDownloadItemIndex ||
+             iDownloadItemIndex != KErrNotFound )
+            {
+            TInt animEffectsValue = iModel->AnimBackgroundState();
+            // Animation background are enabled if value is NOT KMaxTInt.
+            if( animEffectsValue != KMaxTInt )
+                {
+                aMenuPane->SetItemButtonState(
+                    EPslnCmdAnimBackgroundActivate,
+                    EEikMenuItemSymbolOn );
+                aMenuPane->SetItemButtonState(
+                    EPslnCmdAnimBackgroundDeactivate,
+                    EEikMenuItemSymbolIndeterminate );
+                }
+            else
+                {
+                aMenuPane->SetItemButtonState(
+                    EPslnCmdAnimBackgroundActivate,
+                    EEikMenuItemSymbolIndeterminate );
+                aMenuPane->SetItemButtonState(
+                    EPslnCmdAnimBackgroundDeactivate,
+                    EEikMenuItemSymbolOn );
+                }
+            }
+        }
+    else
+        {
+        PSLN_TRACE_DEBUG("CPslnGeneralThemeView::DynInitMenuPaneL empty else");
+        }
+    CPslnBaseView::DynInitMenuPaneL( aResourceId, aMenuPane );
+    }
+
+// -----------------------------------------------------------------------------
+// Handle listbox selection.
+//
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::HandleListBoxSelectionL()
+    {
+    PSLN_TRACE_DEBUG("CPslnGeneralThemeView::HandleListBoxSelectionL");
+    if ( iContainer )
+        {
+        iCurrentItem = iContainer->CurrentItemIndex();
+        }
+
+    if ( iCurrentItem == iDownloadItemIndex )
+        {
+        HandleCommandL( EPslnCmdAppDownload );
+        }
+    else
+        {
+        HandleCommandL( EPslnCmdAppActivate );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Handle listbox item highlight.
+//
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::HandleListBoxItemHighlightL()
+    {
+    PSLN_TRACE_DEBUG("CPslnGeneralThemeView::HandleListBoxItemHighlightL");
+    if ( iContainer )
+        {
+        HandlePreviewStateChange( ETrue );
+        static_cast<CPslnGeneralThemeContainer*>(iContainer)->StartThemePreviewL();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Create container.
+//
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::NewContainerL()
+    {
+    iContainer = new(ELeave) CPslnGeneralThemeContainer();
+    iContainer->SetMiddleSoftkeyObserver( this );
+    static_cast<CPslnGeneralThemeContainer*>(iContainer)->
+        SetThemePreviewObserver( this );
+    }
+
+// -----------------------------------------------------------------------------
+// Sets view specific title pane text.
+//
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::SetTitlePaneL( TInt& aResourceId )
+    {
+    aResourceId = R_PSLN_TITLE_PANE_GENERAL;
+    }
+
+// -----------------------------------------------------------------------------
+// Checks is there a need to update the middle softkey label.
+// This method should do nothing but MSK issues, since it is still called
+// if the framework does not support MSK.
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::CheckMiddleSoftkeyLabelL()
+    {
+    PSLN_TRACE_DEBUG("CPslnGeneralThemeView::CheckMiddleSoftkeyLabelL");
+    TInt currentItem = KErrNotFound;
+    if ( iContainer )
+        {
+        currentItem = iContainer->CurrentItemIndex();
+        }
+
+    TInt activeSkinIndex = 0;
+    if ( iModel )
+        {
+        activeSkinIndex = iModel->ActiveSkinIndex();
+        }
+    if ( iDownloadItemIndex != KErrNotFound )
+        {
+        // If download item is present, increment current index,
+        // so that skin index maps directly to listbox indexes.
+        activeSkinIndex++;
+        }
+
+    // First remove any prevous commands.
+    RemoveCommandFromMSK();
+    if ( currentItem == iDownloadItemIndex && currentItem != KErrNotFound )
+        {
+        // Set middle softkey as Download.
+        CPslnBaseView::SetMiddleSoftKeyLabelL(
+            R_PSLN_MSK_SELECT,
+            EPslnCmdAppDownload );
+        }
+    else if ( currentItem != activeSkinIndex )
+        {
+        // Set middle softkey as Apply.
+        CPslnBaseView::SetMiddleSoftKeyLabelL(
+            R_PSLN_MSK_ACTIVATE,
+            EPslnCmdAppActivate );
+        }
+    else
+        {
+        // Set middle softkey as dummy.
+        CPslnBaseView::SetMiddleSoftKeyLabelL(
+            R_PSLN_MSK_DUMMY,
+            EPslnCmdEmptyCommand );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Requests container to update skin data for D column.
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::UpdateSkinListItemsDColumnOnlyL()
+    {
+    PSLN_TRACE_DEBUG("CPslnGeneralThemeView::UpdateSkinListItemsL");
+    if ( iContainer )
+        {
+        static_cast<CPslnGeneralThemeContainer*>(iContainer)->
+            UpdateSkinListItemsDColumnOnlyL();
+        }
+    CheckMiddleSoftkeyLabelL();
+    }
+
+// -----------------------------------------------------------------------------
+// New theme preview state available.
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::HandlePreviewStateChange( const TBool& aPreviewMode )
+    {
+    iPreviewMode = aPreviewMode;
+//    TRAPD( state, iModel->GetTransitionEffectStateL() );
+//    if ( state != KMaxTInt )
+//        {        
+//        CAknView::StopDisplayingMenuBar();
+//        }
+    if ( iDelayedSkinActivation && !iPreviewMode )
+        {
+        TRAP_IGNORE( HandleCommandL( EPslnCmdAppActivate ) );
+        iDelayedSkinActivation = EFalse;
+        }
+    }
+
+    
+// ---------------------------------------------------------------------------
+// Restart Quick Preview
+// ---------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::RestartQuickPreviewL()
+    {
+    CPslnGeneralThemeContainer* container = static_cast<CPslnGeneralThemeContainer*>(iContainer);
+
+    container->RestartQuickPreviewL();
+    }
+
+// -----------------------------------------------------------------------------
+// Remove local skin items.
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::RemoveLocalSkinItems()
+    {
+    // Remove locally skinned items.
+    MAknsSkinInstance* si = AknsUtils::SkinInstance();
+    if ( si )
+        {        
+        si->SetChangeEventsEnabled( EFalse );
+        si->RemoveLocalItemDefs();
+        si->SetChangeEventsEnabled( ETrue );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Remove MSK command mappings.
+// This method should do nothing but MSK issues.
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::RemoveCommandFromMSK()
+    {
+    PSLN_TRACE_DEBUG("CPslnGeneralThemeView::RemoveCommandFromMSK");
+    CEikButtonGroupContainer* cbaGroup = Cba();
+    // Check if model exists => indicates that UI is not exiting.
+    if ( cbaGroup && iPslnUi->Model() )
+        {
+        cbaGroup->RemoveCommandFromStack( KPslnMSKControlID, EPslnCmdAppDownload );
+        cbaGroup->RemoveCommandFromStack( KPslnMSKControlID, EPslnCmdAppActivate );
+        }
+    }
+// -----------------------------------------------------------------------------
+// Handle listbox stylus down event.
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::HandleListBoxStylusDown()
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// Handle listbox stylus move event.
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::HandleListBoxStylusDrag()
+    {
+    }
+// -----------------------------------------------------------------------------
+// Hightligt Default skin
+// -----------------------------------------------------------------------------
+//
+void CPslnGeneralThemeView::HightlightDefaultSkin()
+    {
+    CPslnGeneralThemeContainer* container = static_cast<CPslnGeneralThemeContainer*>(iContainer);
+    TInt modifier = container->IsEmbeddedLinkVisible( );
+    container->SetCurrentItemIndex( modifier );
+    }
+//  End of File