svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/SvgScreenSaver.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:16 +0200
changeset 0 632761c941a7
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2005 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:  This file implements the SVGT Screen Saver Plugin which
*                is used by Screen Saver application to display SVGT content
*
*/


#include <eikenv.h>
#include <bautils.h>

#include <aknnotewrappers.h> 
#include <SVGTCustControl.h>
#include <coecntrl.h>
#include <SVGTUIDialog.hrh>
#include <SVGTAppObserverUtil.h>
#include "SvgScreenSaver.h"
#include "SvgRenderFrameControl.h"

_LIT( KSccSmilFitValue,"meet" );

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CSvgScreenSaver::CSvgScreenSaver
// -----------------------------------------------------------------------------
//
CSvgScreenSaver::CSvgScreenSaver():iIsRenderFrameControl(ETrue),
                                   iLastError(KErrNone)
    {        
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::~CSvgScreenSaver
// -----------------------------------------------------------------------------
//   
CSvgScreenSaver::~CSvgScreenSaver()
    {
    iFileHandle.Close();
    delete iSvgControl;    
    }
    
// -----------------------------------------------------------------------------
// CSvgScreenSaver::SetRect
// -----------------------------------------------------------------------------
//    
void CSvgScreenSaver::SetRect(const TRect& aRect)
    {
    iRect = aRect;

    if ( iIsRenderFrameControl )
        {
        if ( iSvgControl )
            {
            TInt index = STATIC_CAST(CSvgRenderFrameControl*, iSvgControl)->
                GetCurrentIndex(); 
            delete iSvgControl;      
            iSvgControl = NULL;
            AsFile( iFileName );
            if ( iIsRenderFrameControl && iSvgControl )
                {
                STATIC_CAST(CSvgRenderFrameControl*, iSvgControl)->
                   SetCurrentIndex( index );                    
                }
            }        
        }
    else
        {
        if ( iSvgControl )
            {
            iSvgControl->SetExtentToWholeScreen();
            }
        }        
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::SendCommandL
// -----------------------------------------------------------------------------
//
void CSvgScreenSaver::SendCommandL( TInt aCommand )
    {
    if ( !iSvgControl )
        {
        User::Leave( KErrGeneral );
        }
    if ( iIsRenderFrameControl )
        {
        STATIC_CAST(CSvgRenderFrameControl*, iSvgControl)->
                ProcessViewerCommandL( aCommand );
        }
    else
        {
        STATIC_CAST(CSVGTCustControl*, iSvgControl)->
                ProcessViewerCommandL( aCommand );
        }    
    }
    
// -----------------------------------------------------------------------------
// CSvgScreenSaver::MakeVisible
// -----------------------------------------------------------------------------
//
void CSvgScreenSaver::MakeVisible( TBool aVisible )
    {
    if ( iSvgControl )
        {
        iSvgControl->MakeVisible( aVisible );        
        }    
    }
 
// -----------------------------------------------------------------------------
// CSvgScreenSaver::GetLastError
// -----------------------------------------------------------------------------
//
TInt CSvgScreenSaver::GetLastError() const
    {
    return iLastError;
    }


// -----------------------------------------------------------------------------
// CSvgScreenSaver::FetchImage
// -----------------------------------------------------------------------------
//    
TInt CSvgScreenSaver::FetchImage( const TDesC& aUri, RFs& aSession, 
                 RFile& aFileHandle )
    {
    CSVGTAppObserverUtil::TDownloadNeeded dnloadNeeded = 
                                     CSVGTAppObserverUtil::ELocalImageFile ;
    TRAPD( err, 
       dnloadNeeded = CSVGTAppObserverUtil::IsDownloadNeededL( aUri ));
    if ( err != KErrNone )
        {        
        return err;   
        }
    
           
    if ( CSVGTAppObserverUtil::ELocalImageFile == dnloadNeeded )
        {
                           
        TFileName fileName;    
        if ( CSVGTAppObserverUtil::GetLocalFile( aUri, fileName, iFileName ) )
            {
            return aFileHandle.Open( aSession, fileName, EFileShareAny );
            }
        else
            {
            return KErrNotFound;
            }
        }
    return KErrNotFound;
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::GetSmilFitValue
// -----------------------------------------------------------------------------
//
void CSvgScreenSaver::GetSmilFitValue(TDes& aSmilValue)
    {
    aSmilValue.Copy( KSccSmilFitValue );
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::NotifyL
// -----------------------------------------------------------------------------
//    
TInt CSvgScreenSaver::NotifyL(TNotificationType /*aCallType*/, 
                                    void* /*aParam*/)
    {
    return KErrNone;
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::ConstructL
// -----------------------------------------------------------------------------
//    
void CSvgScreenSaver::ConstructL( const CCoeControl* aParent )
    { 
    iParent = aParent; 
    iEikEnv = CEikonEnv::Static();
    }
    
// -----------------------------------------------------------------------------
// CSvgScreenSaver::AsFile
// -----------------------------------------------------------------------------
//     
TInt CSvgScreenSaver::AsFile(const TDesC& aFileName)
    {
    iFileName = aFileName;
    iLastError = iFileHandle.Open( iEikEnv->FsSession(), 
                                 aFileName, 
                                 EFileShareReadersOnly );
                                 
    if ( iLastError != KErrNone )
        {
        return iLastError;
        }
    TInt aSize = 0;
    iFileHandle.Size(aSize);
        
    if ( aSize > KMaxFileSize )
       {
            iLastError = KErrGeneral;
        }
                                     
    else
        {
            TRAP( iLastError,
            iSvgControl = CSvgRenderFrameControl::NewL( iParent, iFileHandle, this ) );    
        }                                   
            
    if ( iLastError != KErrNone )
        {
        iIsRenderFrameControl = EFalse;
        delete iSvgControl;
        iSvgControl = NULL;
     
        // reset iLastError
        iLastError = KErrNone;

        // Render Frames returned error
        TRAP( iLastError, 
          iSvgControl = CSVGTCustControl::NewL( iFileHandle,
                                              this,   // App Observer
                                              NULL,   // Progress Bar Draw Impl
                                              NULL,	  // MSK label Impl
                                              NULL,   // Exit Observer
                                              EFalse, // No Progressive Render
                                              iParent,
                                              ESvgWindowOwning ));
                                               
        if ( iSvgControl )
            {
            STATIC_CAST(CSVGTCustControl*, iSvgControl)->
                    SetCurrentFullScreenStatus( ETrue );
            // trigger a size changed event
            iSvgControl->SetExtentToWholeScreen();                    
            TRAP_IGNORE(STATIC_CAST(CSVGTCustControl*, iSvgControl)->
                    ProcessViewerCommandL(ESvgtDlgStopCommand));
            }          
        else
            {
            // Control is not created.
            iLastError = KErrGeneral;
            }
        } 
      
    iFileHandle.Close();
   
    return iLastError;
    
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::LinkActivated
// -----------------------------------------------------------------------------
//  
TBool CSvgScreenSaver::LinkActivated( const TDesC& /*aUri*/ )
    {
    return EFalse;
    }

        
// -----------------------------------------------------------------------------
// CSvgScreenSaver::LinkActivatedWithShow
// -----------------------------------------------------------------------------
// 
TBool CSvgScreenSaver::LinkActivatedWithShow( const TDesC& /*aUri*/, 
                                              const TDesC& /*aShow*/ )
    {
    return EFalse;
    }
               
// -----------------------------------------------------------------------------
// CSvgScreenSaver::SetDownloadMenu
// -----------------------------------------------------------------------------
// 
void CSvgScreenSaver::SetDownloadMenu( TBool /*aAddDownloadMenu*/ )
    {
    }
        
// -----------------------------------------------------------------------------
// CSvgScreenSaver::CanShowDownload
// -----------------------------------------------------------------------------
//   
TBool CSvgScreenSaver::CanShowDownload() const
    {
    return EFalse;
    }       

// -----------------------------------------------------------------------------
// CSvgScreenSaver::DisplayDownloadMenuL
// -----------------------------------------------------------------------------
//  
void CSvgScreenSaver::DisplayDownloadMenuL()
    {
    }
// -----------------------------------------------------------------------------
// CSvgScreenSaver::CanShowSave
// -----------------------------------------------------------------------------
// 
TBool CSvgScreenSaver::CanShowSave()
    {
    return EFalse;
    }
        
// -----------------------------------------------------------------------------
// CSvgScreenSaver::IsSavingDone
// -----------------------------------------------------------------------------
// 
TBool CSvgScreenSaver::IsSavingDone()
    {
    return EFalse;
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::DoSaveL
// -----------------------------------------------------------------------------
//  
void CSvgScreenSaver::DoSaveL( TInt /*aCommandId*/ )
    {
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::NewFetchImageData
// -----------------------------------------------------------------------------
//  
TInt CSvgScreenSaver::NewFetchImageData( const TDesC& /* aUri */ )
    {
    return KErrNone;
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::AssignEmbededDataL
// -----------------------------------------------------------------------------
//  
void CSvgScreenSaver::AssignEmbededDataL( const TDesC& /*aUri*/ )
    {
    }

// -----------------------------------------------------------------------------
// CSvgScreenSaver::ExitWhenOrientationChange
// -----------------------------------------------------------------------------
//  
TBool CSvgScreenSaver::ExitWhenOrientationChange()
    {
        return EFalse;
    }

// End Of file.