⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vrexfiledetailsdialog.cpp

📁 S60 实现了录制和播放的功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
* ============================================================================
*  Name     : CVideoFileDetailsDialog from VRexFileDetailsDialog.cpp
*  Part of  : Video Example
*  Created  : 30/08/2006 by Forum  Nokia
*  Implementation notes:
*  Version  : 2.0
*  Copyright: Nokia Corporation, 2006
* ============================================================================
*/

// INCLUDE FILES
#include <aknlists.h>
#include <bautils.h>
#include <stringloader.h>
#include <e32base.h>
#include <utf.h>

#include "VRexPlayerAdapter.h"
#include "VRexFileDetailsDialog.h"
#include "MPlayerUIControllerListener.h"
#include <vrex.rsg>

const TInt KFileSizeOneKilobyte = 1024;
const TInt KMaxDurLength = 16;
const TInt KMaxDateTimeLength = 32;
const TInt KWinSize = 50;

// For meta data
_LIT(KMPTitle,"Title");
_LIT(KMPCopyright,"Copyright");
_LIT(KEmpty, "");
/*
-----------------------------------------------------------------------------

	CVideoFileDetailsDialog::CVideoFileDetailsDialog()

	Description: C++ default constructor can NOT contain any code that might 
    leave.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/

CVideoFileDetailsDialog::CVideoFileDetailsDialog() : iResult(KErrNone)
    {
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::ConstructL()

	Description: Symbian 2nd phase constructor can leave.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::ConstructL()
    {
    iListBox = new (ELeave) CAknDoublePopupMenuStyleListBox();
    }

/*
-----------------------------------------------------------------------------

	CVideoFileDetailsDialog* CVideoFileDetailsDialog::NewL()

	Description: Two-phased constructor.
	Comments   :

    Return values: CVideoFileDetailsDialog object pointer

-----------------------------------------------------------------------------
*/
CVideoFileDetailsDialog* CVideoFileDetailsDialog::NewL()
    {
    CVideoFileDetailsDialog* self = new( ELeave ) CVideoFileDetailsDialog();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

/*
-----------------------------------------------------------------------------

	CVideoFileDetailsDialog::~CVideoFileDetailsDialog()

	Description: Destructor
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
CVideoFileDetailsDialog::~CVideoFileDetailsDialog()
    {
    if (iListBox)
        {
        delete iListBox;
        iListBox = NULL;
        }
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::ExecuteLD(const TDesC& aFileName)

	Description: This method launches the file details dialog.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::ExecuteLD(const TDesC& aFileName)
    {
    CVideoFileDetails* fileDetails = new (ELeave) CVideoFileDetails();
    CleanupStack::PushL(fileDetails);

    CleanupStack::PushL(this);

     // File name
    TParse parse;
	parse.Set(aFileName,NULL,NULL);
    fileDetails->iFileName = parse.Name().AllocL();

    CPDummyController* dummy = CPDummyController::NewLC();
    TRect tmp;
    CVideoPlayerUtility* videoPlayer = 
        CVideoPlayerUtility::NewL(*this,EMdaPriorityNormal,
    	EMdaPriorityPreferenceNone,dummy->GetClientWsSession(),
        dummy->GetScreenDevice(),
    	dummy->GetClientWindow(),tmp,tmp);
    CleanupStack::PushL(videoPlayer);

	// Open
    videoPlayer->OpenFileL(aFileName);
    // Wait open to complete
    if( iWait.IsStarted() )
    	{
    	User::LeaveIfError(iResult);
    	}
    iWait.Start();
    // Prepare
    videoPlayer->Prepare();
    // Wait prepare to complete
    if( iWait.IsStarted() )
    	{
    	User::LeaveIfError(iResult);
    	}
    iWait.Start();
    // Get video file details
    // Duration
    fileDetails->iDurationInSeconds = 
        videoPlayer->DurationL().Int64() / KMPOneSecond;
    // Resolution
    TSize size;
    videoPlayer->VideoFrameSizeL(size);
    fileDetails->iResolutionHeight = size.iHeight;
    fileDetails->iResolutionWidth = size.iWidth;
    // Bitrate
    fileDetails->iBitrate = videoPlayer->VideoBitRateL();
    // Format
    TBuf<KMaxDataTypeLength> format;
    CnvUtfConverter::ConvertToUnicodeFromUtf8(format,
        videoPlayer->VideoFormatMimeType());
    if (format.CompareF(KEmpty))
		{
        fileDetails->iFormat = format.AllocL();
        }

	// Copyright & title
    TInt metaCount = videoPlayer->NumberOfMetaDataEntriesL();
    CMMFMetaDataEntry* metaData;
    for (TInt i = 0; i < metaCount; i++)
		{
        metaData = videoPlayer->MetaDataEntryL(i);
        if (!metaData->Name().CompareF(KMPCopyright))
			{
            fileDetails->iCopyright = metaData->Value().AllocL();
             }
        if (!metaData->Name().CompareF(KMPTitle))
             {
             fileDetails->iTitle = metaData->Value().AllocL();
             }
             delete metaData;
         }
    CleanupStack::PopAndDestroy(videoPlayer);
    CleanupStack::PopAndDestroy(dummy);

    CleanupStack::Pop(this); //this
    // Show file details in differend ExecuteLD
    ExecuteLD(fileDetails);
    CleanupStack::PopAndDestroy(fileDetails); // fileDetails
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::ExecuteLD(CVideoFileDetails* aFileDetails)

	Description: This method launches the dialog.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::ExecuteLD(CVideoFileDetails* aFileDetails)
    {
    CleanupStack::PushL(this);

    CAknPopupList* popupList = 
        CAknPopupList::NewL(iListBox,R_AVKON_SOFTKEYS_OK_EMPTY,
            AknPopupLayouts::EMenuDoubleWindow);
    CleanupStack::PushL(popupList);

    iListBox->ConstructL(popupList, EAknListBoxViewerFlags);
    iListBox->CreateScrollBarFrameL(ETrue);
    iListBox->ScrollBarFrame()->
        SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,
            CEikScrollBarFrame::EAuto);

    SetTitleL(popupList);
    FillListBoxL(aFileDetails);

    CleanupStack::Pop(popupList); //popupList
    popupList->ExecuteLD();
    CleanupStack::PopAndDestroy(this); //this
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::SetTitleL(CAknPopupList* aPopupList)

	Description: This method sets the title for the popup list.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::SetTitleL(CAknPopupList* aPopupList)
    {
    HBufC* title = StringLoader::LoadLC(R_VREX_FILE_DETAILS);
    aPopupList->SetTitleL(*title);
    CleanupStack::PopAndDestroy(title); //title
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::FillListBoxL(CVideoFileDetails* aFileDetails)

	Description: This method fills the listbox.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::FillListBoxL(CVideoFileDetails* aFileDetails)
    {
    CDesCArray* itemArray = 
        static_cast<CDesCArray*>(iListBox->Model()->ItemTextArray());

    MakeTitleItemL(itemArray,aFileDetails);
    MakeUrlItemL(itemArray,aFileDetails);
    MakeFormatItemL(itemArray,aFileDetails);
    MakeResolutionItemL(itemArray,aFileDetails);
    MakeDurationItemL(itemArray,aFileDetails);
    MakeBitrateItemL(itemArray,aFileDetails);
    MakeSizeItemL(itemArray,aFileDetails);
    MakeDateItemL(itemArray,aFileDetails);
    MakeTimeItemL(itemArray,aFileDetails);
    MakeCopyrightItemL(itemArray,aFileDetails);

    iListBox->HandleItemAdditionL();
    iListBox->SetCurrentItemIndex(0);
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::AddItemToListBoxL(const TDesC& aHeading,
			    const TDesC& aValue, CDesCArray* aItemArray)

	Description: This method adds item to the list box.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::AddItemToListBoxL(const TDesC& aHeading,
								const TDesC& aValue, CDesCArray* aItemArray)
    {
    CDesCArrayFlat* items = new (ELeave) CDesCArrayFlat(2);
    CleanupStack::PushL(items);
    items->AppendL(aHeading); // First string (heading)
    items->AppendL(aValue);   // Second string (value)
    HBufC* headingAndValue = 
        StringLoader::LoadLC( R_VREX_FILE_DETAILS_ROW_FORMAT, *items);
    aItemArray->AppendL(*headingAndValue);
    CleanupStack::PopAndDestroy(headingAndValue); // items & headingAndValue
    CleanupStack::PopAndDestroy(items);
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::MakeTitleItemL(CDesCArray* aItemArray,
                                           CVideoFileDetails* aFileDetails)

	Description: This method makes the title item.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::MakeTitleItemL(CDesCArray* aItemArray,
                                           CVideoFileDetails* aFileDetails)
    {
    if (aFileDetails->iTitle)
        {
        HBufC* heading = StringLoader::LoadLC(R_VREX_FILE_TITLE_HEADING);
        AddItemToListBoxL(*heading,*aFileDetails->iTitle,aItemArray);
        CleanupStack::PopAndDestroy(heading); // heading
        return;
        }

    if (aFileDetails->iFileName)
        {
        HBufC* heading = StringLoader::LoadLC(R_VREX_FILE_NAME_HEADING);
        AddItemToListBoxL(*heading,*aFileDetails->iFileName,aItemArray);
        CleanupStack::PopAndDestroy(heading); // heading
        }
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::MakeUrlItemL(CDesCArray* aItemArray,
                                           CVideoFileDetails* aFileDetails)

	Description: This method makes url item.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::MakeUrlItemL(CDesCArray* aItemArray,
                                           CVideoFileDetails* aFileDetails)
    {
    if (aFileDetails->iUrl)
        {
        HBufC* heading = StringLoader::LoadLC(R_VREX_FILE_URL_HEADING);
        AddItemToListBoxL(*heading,*aFileDetails->iUrl,aItemArray);
        CleanupStack::PopAndDestroy(heading); // heading
        }
    }
/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::MakeFormatItemL(CDesCArray* aItemArray,
                                           CVideoFileDetails* aFileDetails)

	Description: This method makes video file heading.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::MakeFormatItemL(CDesCArray* aItemArray,
                                           CVideoFileDetails* aFileDetails)
    {
    if (aFileDetails->iFormat)
        {
        HBufC* heading = StringLoader::LoadLC(R_VREX_FILE_FORMAT_HEADING);
        AddItemToListBoxL(*heading,*aFileDetails->iFormat,aItemArray);
        CleanupStack::PopAndDestroy(heading); // heading
        }
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::MakeResolutionItemL(CDesCArray* aItemArray,
                                               CVideoFileDetails* aFileDetails)

	Description: This method makes resolution item.
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
void CVideoFileDetailsDialog::MakeResolutionItemL(CDesCArray* aItemArray,
                                               CVideoFileDetails* aFileDetails)
    {
    if (aFileDetails->iResolutionWidth && aFileDetails->iResolutionHeight)
        {
        HBufC* heading = StringLoader::LoadLC(R_VREX_FILE_RESOLUTION_HEADING);
        CArrayFix<TInt>* items = new (ELeave) CArrayFixFlat<TInt>(2);
        CleanupStack::PushL(items);
        items->AppendL(aFileDetails->iResolutionWidth);
        items->AppendL(aFileDetails->iResolutionHeight);
        HBufC* value = StringLoader::LoadLC(R_VREX_FILE_RESOLUTION,*items);
        AddItemToListBoxL(*heading,*value,aItemArray);
        CleanupStack::PopAndDestroy(value); // heading, items, value
        CleanupStack::PopAndDestroy(items);
        CleanupStack::PopAndDestroy(heading);
        }
    }

/*
-----------------------------------------------------------------------------

	void CVideoFileDetailsDialog::MakeDurationItemL(CDesCArray* aItemArray,
                                             CVideoFileDetails* aFileDetails)

	Description: This method makes duration item.
	Comments   :

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -