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

📄 videofiledetailsdialog.cpp

📁 nokia S60_video_operation
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
* ============================================================================
*  Name     : CVideoFileDetailsDialog from VideoFileDetailsDialog.h
*  Part of  : Video Recording Example (VRex)
*  Created  : 16.03.2004 by Nokia Forum
*  Description: Declares media file details dialog
*
*  Version  :
*  Copyright: Nokia Corporation
* ============================================================================
*/  
#include <aknlists.h>
#include <bautils.h>
#include <stringloader.h>
#include <e32base.h>
#include <utf.h>
#include <vrex.rsg>

#include "VideoPlayerAdapter.h"
#include "VideoFileDetailsDialog.h"

#include "MPlayerUIControllerListener.h"

const TInt KFileSizeOneKilobyte = 1024;

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

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

	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();
    return self;
    }

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

	CVideoFileDetailsDialog::~CVideoFileDetailsDialog()

	Description: Destructor
	Comments   :

    Return values: N/A

-----------------------------------------------------------------------------
*/
CVideoFileDetailsDialog::~CVideoFileDetailsDialog()
    {
    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
    iWait.Start();
    User::LeaveIfError(iResult);
    // Prepare
    videoPlayer->Prepare();
    // Wait prepare to complete
    iWait.Start();
    User::LeaveIfError(iResult);
    // 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(_L("")))
		{
        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(2); // dummy and videoPlayer
    
    CleanupStack::Pop(); //this
    // Show file details in differend ExecuteLD
    ExecuteLD(fileDetails);
    CleanupStack::PopAndDestroy(); // 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->ExecuteLD();
    CleanupStack::PopAndDestroy(); //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
    }

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

	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(2); // items & headingAndValue 
    }

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

	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
        return;
        }
    
    if (aFileDetails->iFileName)
        {
        HBufC* heading = StringLoader::LoadLC(R_VREX_FILE_NAME_HEADING);
        AddItemToListBoxL(*heading,*aFileDetails->iFileName,aItemArray);
        CleanupStack::PopAndDestroy(); // 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
        }
    }
/*
-----------------------------------------------------------------------------

	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
        }
    }

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

	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(3); // heading, items, value 
        }
    }

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

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

	Description: This method makes duration item.
	Comments   :

    Return values: N/A

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

⌨️ 快捷键说明

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