videditor/ManualVideoEditor/src/VeiAppUi.cpp
author Mikael Laine <mikael.laine@ixonos.com>
Fri, 29 Jan 2010 14:08:33 +0200
changeset 0 951a5db380a0
permissions -rw-r--r--
Committing the Video Editor package under the Eclipse Public License

/*
* Copyright (c) 2010 Ixonos Plc.
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the "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:
* Ixonos Plc
*
* Description: 
*
*/



// INCLUDE FILES
// System includes
#include <avkon.hrh>
#include <eikmenup.h>
#include <eikenv.h>
#include <hlplch.h>     // HlpLauncher
#include <manualvideoeditor.rsg>
#include <sendui.h>     // CSendAppUi 
#include <stringloader.h>
#include <bautils.h>
#include <apparc.h>

// User includes
#include "manualvideoeditor.hrh"
#include "VeiAppUi.h"
#include "VeiEditVideoView.h"
#include "VeiSettingsView.h"
#include "VeiCutVideoView.h"
#include "VeiCutAudioView.h"
#include "VeiTrimForMmsView.h"
#include "VeiTempMaker.h"
#include "VideoEditorCommon.h"


// ================= MEMBER FUNCTIONS =======================
//
// ----------------------------------------------------------
// CVeiAppUi::ConstructL()
// ?implementation_description
// ----------------------------------------------------------
//
void CVeiAppUi::ConstructL()
    {
    LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL In" );

   	BaseConstructL( EAppOrientationAutomatic | EAknEnableSkin );

    CVeiTempMaker* maker = CVeiTempMaker::NewL();
    maker->EmptyTempFolder();
    delete maker;

    iSendAppUi = CSendUi::NewL();
    /*
     *	Cut video view and Cut audio view are references to edit video view and
     *	ownerships must be transfered(AddViewL(...)) to CAknViewAppUi(this) 
     *	AFTER references are taken to edit video view. Otherwise exit is not clean.
     */

    // Cut Video view
    iCutVideoView = new( ELeave )CVeiCutVideoView;
    iCutVideoView->ConstructL();

    // Cut Audio view
    iCutAudioView = CVeiCutAudioView::NewL();

    // Edit Video view
    iEditVideoView = CVeiEditVideoView::NewL( *iCutVideoView, * iCutAudioView, * iSendAppUi );
        
    AddViewL( iEditVideoView ); // transfer ownership to CAknViewAppUi
    LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL EditVideoView OK" );

    AddViewL( iCutAudioView );
    LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL CutAudioView OK" );

    AddViewL( iCutVideoView ); // transfer ownership to CAknViewAppUi
    LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL CutVideoView OK" );

    //Trim for MMS view
    iTrimForMmsView = CVeiTrimForMmsView::NewL( *iSendAppUi );
    AddViewL( iTrimForMmsView ); // Transfer ownership to CAknViewAppUi
    LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL TrimForMmsView OK" );

    //Settings view
    iSettingsView = CVeiSettingsView::NewL();
    AddViewL( iSettingsView ); // Transfer ownership to CAknViewAppUi
    LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL SettingsView OK" );

    iVolume =  - 1; // Volume not set

    iCoeEnv->RootWin().EnableScreenChangeEvents();

    SetDefaultViewL( *iEditVideoView );

    LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL Out" );
    }

// ----------------------------------------------------
// CVeiAppUi::~CVeiAppUi()
// Destructor
// Frees reserved resources
// ----------------------------------------------------
//
CVeiAppUi::~CVeiAppUi()
    {
    LOG( KVideoEditorLogFile, "CVeiAppUi::~CVeiAppUi: In" );
   
    delete iSendAppUi;

    LOG( KVideoEditorLogFile, "CVeiAppUi::~CVeiAppUi: Out" );
    }

//=============================================================================
CVeiAppUi::CVeiAppUi()
    {
    }

//=============================================================================
void CVeiAppUi::InsertVideoClipToMovieL( TBool aDoOpen, const TDesC& aFilename )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiAppUi::InsertVideoClipTomovieL (%S)", &aFilename );
           

    if ( iEditVideoView )
        {
        iEditVideoView->AddClipL( aFilename, aDoOpen );
        }
    }

// ----------------------------------------------------
// CVeiAppUi::HandleKeyEventL(
//     const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
// ?implementation_description
// ----------------------------------------------------
//
TKeyResponse CVeiAppUi::HandleKeyEventL( const TKeyEvent&  /*aKeyEvent*/,
                                         TEventCode /*aType*/ )
    {
    return EKeyWasNotConsumed;
    }


// ----------------------------------------------------
// CVeiAppUi::HandleCommandL(TInt aCommand)
// ?implementation_description
// ----------------------------------------------------
//
void CVeiAppUi::HandleCommandL( TInt aCommand )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiAppUi::HandleCommandL( %d ): In", aCommand );
           
    switch ( aCommand )
        {
        //
        // Context Sensitive Help launching for:
        //  -'Settings' view
        //  -'Trim for MMS' view
        //  -'Edit video' view
        //  -'Cut video' view
        //  -'Cut audio' view
        //
        case EAknCmdHelp:
        case EVeiCmdSettingsViewHelp:
        case EVeiCmdTrimForMmsViewHelp:
        case EVeiCmdEditVideoViewHelp:
        case EVeiCmdCutVideoViewHelp:
                {
                // Get the current context
                CArrayFix < TCoeHelpContext > * context = AppHelpContextL();

                // Launch the help application with current context topic
                HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
                    context );
                break;
                }
        case EAknSoftkeyBack:
        case EEikCmdExit:
        case EAknSoftkeyExit:
        case EAknCmdExit:
                {
                iOnTheWayToDestruction = ETrue;

                CVeiTempMaker* maker = CVeiTempMaker::NewL();
                maker->EmptyTempFolder();
                delete maker;

                iEditVideoView->HandleCommandL( EAknSoftkeyOk );
                Exit();
                break;
                }
        default:
            break;
        }
    LOG( KVideoEditorLogFile, "CVeiAppUi::HandleCommandL: Out" );
    }

//=============================================================================
void CVeiAppUi::ReadSettingsL( TVeiSettings& aSettings )const
    {
    LOG( KVideoEditorLogFile, "CVeiAppUi::ReadSettingsL: in" );
    CDictionaryStore* store = Application()->OpenIniFileLC( iCoeEnv->FsSession() );
        

    TBool storePresent = store->IsPresentL( KUidVideoEditor );  // UID has an associated stream?

    if ( storePresent )
        {
        RDictionaryReadStream readStream;
        readStream.OpenLC( *store, KUidVideoEditor );

        readStream >> aSettings; // Internalize data to TVeiSettings.

        CleanupStack::PopAndDestroy( &readStream );
        }
    else
        {
        /* Read the default filenames from resources */
        HBufC* videoName = iEikonEnv->AllocReadResourceLC( R_VEI_SETTINGS_VIEW_SETTINGS_ITEM_VALUE );

        const CFont* myFont = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont );

        aSettings.DefaultVideoName() = AknTextUtils::ChooseScalableText( videoName->Des(), * myFont, 400 );
        CleanupStack::PopAndDestroy( videoName );

        HBufC* snapshotName = iEikonEnv->AllocReadResourceLC( R_VEI_SETTINGS_VIEW_SETTINGS_ITEM2_VALUE );
            
        aSettings.DefaultSnapshotName() = AknTextUtils::ChooseScalableText( snapshotName->Des(), * myFont, 400 );
        CleanupStack::PopAndDestroy( snapshotName );

        /* Memory card is used as a default target */
        aSettings.MemoryInUse() = CAknMemorySelectionDialog::EMemoryCard;

        /* Set save quality to "Auto" by default. */
        aSettings.SaveQuality() = TVeiSettings::EAuto;

        RDictionaryWriteStream writeStream;
        writeStream.AssignLC( *store, KUidVideoEditor );

        writeStream << aSettings;

        writeStream.CommitL();

        store->CommitL();

        CleanupStack::PopAndDestroy( &writeStream ); 
        }
    CleanupStack::PopAndDestroy( store );
    LOG( KVideoEditorLogFile, "CVeiAppUi::ReadSettingsL: out" );
    }

//=============================================================================
void CVeiAppUi::WriteSettingsL( const TVeiSettings& aSettings )const
    {
    LOG( KVideoEditorLogFile, "CVeiAppUi::WriteSettingsL: in" );
    CDictionaryStore* store = Application()->OpenIniFileLC( iCoeEnv->FsSession() );

    RDictionaryWriteStream writeStream;
    writeStream.AssignLC( *store, KUidVideoEditor );
    writeStream << aSettings;
    writeStream.CommitL();

    store->CommitL();

    CleanupStack::PopAndDestroy( &writeStream );
    CleanupStack::PopAndDestroy( &store );    
    LOG( KVideoEditorLogFile, "CVeiAppUi::WriteSettingsL: out" );
    }

//=============================================================================
void CVeiAppUi::HandleScreenDeviceChangedL()
    {
    LOG( KVideoEditorLogFile, "CVeiAppUi::HandleScreenDeviceChangedL: In" );
    CAknViewAppUi::HandleScreenDeviceChangedL();
    if ( iEditVideoView )
        {
        iEditVideoView->HandleScreenDeviceChangedL();
        }
    LOG( KVideoEditorLogFile, "CVeiAppUi::HandleScreenDeviceChangedL: Out" );
    }

//=============================================================================
void CVeiAppUi::HandleResourceChangeL( TInt aType )
    {
    LOG( KVideoEditorLogFile, "CVeiAppUi::HandleResourceChangeL: In" );
    CAknAppUi::HandleResourceChangeL( aType );
    if ( iEditVideoView )
        {
        iEditVideoView->HandleResourceChange( aType );
        }
    if ( iCutVideoView )
        {
        iCutVideoView->HandleResourceChange( aType );
        }
    if ( iCutAudioView )
        {
        iCutAudioView->HandleResourceChange( aType );
        }
    if ( iTrimForMmsView )
        {
        iTrimForMmsView->HandleResourceChange( aType );
        }
    LOG( KVideoEditorLogFile, "CVeiAppUi::HandleResourceChangeL: Out" );
    }

//=============================================================================
void CVeiAppUi::HandleFileNotificationEventL()
    {
    LOG( KVideoEditorLogFile, "CVeiAppUi::HandleFileNotificationEventL: In" );
    if ( iEditVideoView )
        {
        if ( iEditVideoView->WaitMode() == CVeiEditVideoView ::EProcessingMovieSaveThenQuit )
            {
            HandleCommandL( EAknCmdExit );
            }
        }
    LOG( KVideoEditorLogFile, "CVeiAppUi::HandleFileNotificationEventL: Out" );
    }

//=============================================================================
void CVeiAppUi::HandleForegroundEventL( TBool aForeground )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiAppUi::HandleForegroundEventL: In: %d", aForeground );
    CAknViewAppUi::HandleForegroundEventL( aForeground );
    if ( !aForeground )
        {
        // Set the priority to low. This is needed to handle the situations 
        // where the engine is performing heavy processing while the application 
        // is in background.
        RProcess myProcess;
        iOriginalProcessPriority = myProcess.Priority();
        LOGFMT3( KVideoEditorLogFile, 
                "CVeiAppUi::HandleForegroundEventL: changing priority of process %Ld from %d to %d", myProcess.Id().Id(), iOriginalProcessPriority, EPriorityLow );
        myProcess.SetPriority( EPriorityLow );
        iProcessPriorityAltered = ETrue;
        }
    else if ( iProcessPriorityAltered )
        {
        // Return to normal priority.
        RProcess myProcess;
        TProcessPriority priority = myProcess.Priority();
        if ( priority < iOriginalProcessPriority )
            {
            myProcess.SetPriority( iOriginalProcessPriority );
            }
        iProcessPriorityAltered = EFalse;
        LOGFMT2( KVideoEditorLogFile, 
                "CVeiAppUi::HandleForegroundEventL: process %Ld back to normal priority %d", myProcess.Id().Id(), priority );
        }

    LOG( KVideoEditorLogFile, "CVeiAppUi::HandleForegroundEventL: Out" );
    }

//=============================================================================
TErrorHandlerResponse CVeiAppUi::HandleError ( TInt aError,
                                               const SExtendedError & aExtErr,
                                               TDes & aErrorText,
                                               TDes & aContextText )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiAppUi::HandleError: %d", aError );

    // Let the framework handle errors
	return CAknViewAppUi::HandleError ( aError, aExtErr, aErrorText, aContextText );
    }

// End of File