src/screensaverview.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:30:40 +0100
branchRCL_3
changeset 26 e8d784ac1a4b
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2004 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:   Screensaver view class implementation.
*
*/



#include <power_save_display_mode.h>
#include <screensaver.rsg>

#include "ScreensaverUtils.h"
#include "screensaverview.h"
#include "screensaverappui.h"
#include "screensaverplugin.h"
#include "screensaverutility.h"
#include "screensaverctrlmovingtext.h"
#include "screensaverctrlnone.h"
#include "screensaverctrlplugin.h"
#include "screensaverengine.h"
#include "screensavershareddatai.h"

const TUid KBigClockScreensaverPluginImplUid = { 0x2002E6DE };

// -----------------------------------------------------------------------------
// CScreensaverView::NewLC
// add this NewLC code called by UI
// -----------------------------------------------------------------------------
// 
CScreensaverView* CScreensaverView::NewL()
    {
    CScreensaverView* self = new( ELeave ) CScreensaverView();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop();
    return self;
    }

// -----------------------------------------------------------------------------
// CScreensaverView::CScreensaverView
// -----------------------------------------------------------------------------
//
CScreensaverView::CScreensaverView()
    {
    }


// -----------------------------------------------------------------------------
// CScreensaverView::~CScreensaverView
// -----------------------------------------------------------------------------
//
CScreensaverView::~CScreensaverView( )
    {
    DestroyDisplayObject();
    }


// -----------------------------------------------------------------------------
// CScreensaverView::ConstructL
// -----------------------------------------------------------------------------
//
void CScreensaverView::ConstructL( )
    {
    // Let CAknView do its stuff
    BaseConstructL();
    
    SetDisplayObject( PslnSettingScreensaverType() );
    }


// -----------------------------------------------------------------------------
// CScreensaverView::CreateDisplayObjectL
// -----------------------------------------------------------------------------
//
void CScreensaverView::CreateDisplayObjectL( TDisplayObjectType aType )
    {
    SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::CreateDisplayObjectL "),aType);
    
    DestroyDisplayObject();
    
    switch( aType )
        {
        case EDisplayPlugin:
            {
            iControl = CScreensaverCtrlPlugin::NewL();
            CScreensaverCtrlPlugin* pluginCtrl = 
                STATIC_CAST( CScreensaverCtrlPlugin*, iControl );
            if ( pluginCtrl->PluginImplementationUid() ==
                 KBigClockScreensaverPluginImplUid )
                {
                iIsContentless = ETrue;
                }
            break;
            }
        case EDisplayTime:
        case EDisplayText:
#ifdef USE_DATE_AND_TEXT   
            {
            iControl = CScreensaverCtrlMovingText::NewL( aType );
            break;
            }
#endif
        case EDisplayNone:
            {
            iControl = CScreensaverCtrlNone::NewL();
          //  iIsContentless = ETrue;
            break;
            }
            
        default:
            {
            break;
            }
        }
    
    iCurrentControlType = aType;
    }

// -----------------------------------------------------------------------------
// CScreensaverView::SetDisplayObject
// -----------------------------------------------------------------------------
//
void CScreensaverView::SetDisplayObject( TDisplayObjectType aType )
    {
    SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::SetDisplayObject "));
    
    TRAPD( error, CreateDisplayObjectL( aType ) );

    if(error == KErrNone)
        return;

    SCRLOGGER_WRITE("ResetDisplayObject() setting default screensaver");

    TRAP_IGNORE( CreateDisplayObjectL( DefaultScreensaverType() ) );
    }

// -----------------------------------------------------------------------------
// CScreensaverView::CreatePreviewDisplayObjectL
// -----------------------------------------------------------------------------
//
void CScreensaverView::CreatePreviewDisplayObjectL()
    {
    SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::CreatePreviewDisplayObjectL "));
    TRAPD( error, CreateDisplayObjectL( PslnSettingScreensaverType() ) );

    if(error == KErrNone)
        {
        Model().SharedDataInterface()->SetScreensaverPreviewState(
            EScreenSaverPreviewLoaded );
        return;
        }
    
    Model().SharedDataInterface()->SetScreensaverPreviewState(
        EScreenSaverPreviewError );
    }

// ---------------------------------------------------------------------------
// CScreensaverView::IsContentlessScreensaver
// ---------------------------------------------------------------------------
//
TBool CScreensaverView::IsContentlessScreensaver() const
    {
    return iIsContentless;
    }

// -----------------------------------------------------------------------------
// CScreensaverView::Id
// -----------------------------------------------------------------------------
//
TUid CScreensaverView::Id( ) const
    {
    return KUidScreensaverView;
    }


// -----------------------------------------------------------------------------
// CScreensaverView::DoActivateL
// -----------------------------------------------------------------------------
//
void CScreensaverView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
    TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
    {
    }


// -----------------------------------------------------------------------------
// CScreensaverView::DoDeactivate
// -----------------------------------------------------------------------------
//
void CScreensaverView::DoDeactivate( )
    {
    }

// -----------------------------------------------------------------------------
// CScreensaverView::ShowDisplayObject
// -----------------------------------------------------------------------------
//
void CScreensaverView::ShowDisplayObject()
    {
    SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::ShowDisplayObject "));
    
    iControl->StartDrawObject();
    }

// -----------------------------------------------------------------------------
// CScreensaverView::HideDisplayObject
// -----------------------------------------------------------------------------
//
void CScreensaverView::HideDisplayObject()
    {
    SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::HideDisplayObject "));
    iControl->StopDrawObject();

    if ( !IsContentlessScreensaver() )
        {
        ScreensaverUtility::SendToBackground();
        }
    }

// -----------------------------------------------------------------------------
// CScreensaverView::UpdateAndRefresh
// Updates indicators and refreshes the display
// -----------------------------------------------------------------------------
//
void CScreensaverView::UpdateAndRefresh( )
    {
    SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::UpdateAndRefresh "));
    iControl->Refresh();
    }

// -----------------------------------------------------------------------------
// CScreensaverView::DefaultScreensaverType
// -----------------------------------------------------------------------------
//
TDisplayObjectType CScreensaverView::DefaultScreensaverType()
    {
    return Model().SharedDataInterface()->DefaultScreensaverType();
    }

// -----------------------------------------------------------------------------
// CScreensaverView::PslnSettingScreensaverType
// -----------------------------------------------------------------------------
//
TDisplayObjectType CScreensaverView::PslnSettingScreensaverType()
    {
    return Model().SharedDataInterface()->DisplayObjectType();
    }

// -----------------------------------------------------------------------------
// CScreensaverView::Model
// -----------------------------------------------------------------------------
//
CScreensaverEngine& CScreensaverView::Model() const
    {
    return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->Model(); 
    }

// -----------------------------------------------------------------------------
// CScreensaverView::DestroyDisplayObject
// -----------------------------------------------------------------------------
//
void CScreensaverView::DestroyDisplayObject()
    {
    SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::DestroyDisplayObject "));
    if( iControl )
        {
        delete iControl;
        iControl = NULL;
        }
    iIsContentless = EFalse;
    }
// End of file