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

📄 videofiledetailsdialog.cpp

📁 NOKIA S60手机3gp视频播放器源代码.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
* ============================================================================
*  Name     : CVideoFileDetailsDialog from VideoFileDetailsDialog.h
*  Part of  : Video
*  Created  : 10/14/2003 by Forum Nokia
*  Description:
*		 Declares Video file details dialog
*  Version  :
*  Copyright: Forum Corporation, 2003
* ============================================================================
*/
  
#include <aknlists.h>
#include <bautils.h>
#include <stringloader.h>
#include <e32base.h>
#include <utf.h>
#include <Video.rsg>

#include "Videoengine.h"
#include "VideoFileDetailsDialog.h"
#include "MPlayerUIControllerListener.h"

const TInt KFileSizeOneKilobyte = 1024;
const TInt KMaxUrlLength = 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;
    }

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

	void CVideoFileDetailsDialog::ExecuteLD(const TDesC& aFileName)

	Description: 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);

     // filename
    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: 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: Sets the title for the Popup list
	Comments   :

    Return values: N/A

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

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

	void CVideoFileDetailsDialog::FillListBoxL(CVideoFileDetails* aFileDetails)

	Description: 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: 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_VIDEO_FILE_DETAILS_ROW_FORMAT, *items);
    aItemArray->AppendL(*headingAndValue);
    CleanupStack::PopAndDestroy(2); // items & headingAndValue 
    }


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

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

	Description: Makes the title item
	Comments   :

    Return values: N/A

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


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

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

	Description: Makes Url item
	Comments   :

    Return values: N/A

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


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

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

	Description: Makes video file heading
	Comments   :

    Return values: N/A

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

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

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

	Description: 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_VIDEO_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_VIDEO_FILE_RESOLUTION,*items);
        AddItemToListBoxL(*heading,*value,aItemArray);
        CleanupStack::PopAndDestroy(3); // heading,items,value 
        }
    }

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

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

	Description: 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 + -