#include "ortoolmedia_tool.h"
#define ORTOOLMEDIA__CLASS ORTOOLMEDIA__CLASSNAME
#define ORTOOLMEDIA__LABEL "Media"
#define ORTOOLMEDIA__DESC "FBSDK - Media Tool Description"
#define STR_NOVIDEO "No video";
ORTOOLMEDIA__LABEL,
ORTOOLMEDIA__DESC,
bool ORToolMedia::FBCreate()
{
StartSize[0] = 500;
StartSize[1] = 250;
UICreate ();
UIConfigure ();
UIReset ();
OnIdle.Add(
this, (
FBCallback)&ORToolMedia::EventToolIdle );
OnShow.Add(
this, (
FBCallback)&ORToolMedia::EventToolShow );
return true;
}
void ORToolMedia::FBDestroy()
{
OnIdle.Remove(
this, (
FBCallback)&ORToolMedia::EventToolIdle );
OnShow.Remove(
this, (
FBCallback)&ORToolMedia::EventToolShow );
}
void ORToolMedia::UICreate()
{
int lS = 4;
int lH = 18;
AddRegion("LabelDirections", "LabelDirections",
AddRegion("ButtonOpenVideo", "ButtonOpenVideo",
AddRegion("ButtonControlFrame", "ButtonControlFrame",
AddRegion("EditNumberFrame", "EditNumberFrame",
AddRegion("LabelMedia", "LabelMedia",
AddRegion("ListMedia", "ListMedia",
AddRegion("SpreadInfo", "SpreadInfo",
AddRegion("ViewImage", "ViewImage",
SetControl( "LabelDirections", mLabelDirections );
SetControl( "ButtonOpenVideo", mButtonOpenVideo );
SetControl( "EditNumberFrame", mEditNumberFrame );
SetControl( "ButtonControlFrame", mButtonControlFrame );
SetControl( "LabelMedia", mLabelMedia );
SetControl( "ListMedia", mListMedia );
SetControl( "SpreadInfo", mSpreadInfo );
SetView ( "ViewImage", mViewImage );
}
void ORToolMedia::UIConfigure()
{
mLabelDirections.Caption = "This tool demonstrates the use of the FBView & FBVideo classes to display a video.";
mEditNumberFrame.Min = 0;
mEditNumberFrame.Precision = 0;
mEditNumberFrame.Max = 0;
mButtonOpenVideo.Caption = "Open Video";
mButtonControlFrame.Caption = "Frame Control";
mSpreadInfo.GetColumn(-1).Width = 70;
mSpreadInfo.ColumnAdd("Video",0);
mSpreadInfo.GetColumn(0).Width = 90;
mSpreadInfo.Caption = STR_NOVIDEO;
mSpreadInfo.RowAdd("Name", 0);
mSpreadInfo.RowAdd("File", 1);
mSpreadInfo.RowAdd("Proxy", 2);
mSpreadInfo.RowAdd("Storage", 3);
mSpreadInfo.RowAdd("Width", 4);
mSpreadInfo.RowAdd("Height", 5);
mSpreadInfo.RowAdd("Time", 6);
mSpreadInfo.RowAdd("Start", 7);
mSpreadInfo.RowAdd("Stop", 8);
mSpreadInfo.RowAdd("FPS", 9);
mSpreadInfo.RowAdd("Speed", 10);
mSpreadInfo.RowAdd("Interlace", 11);
mSpreadInfo.RowAdd("Free Running", 12);
mSpreadInfo.RowAdd("Loop", 13);
mSpreadInfo.RowAdd("FrameTime", 14);
mSpreadInfo.RowAdd("Current Frame", 15);
mSpreadInfo.RowAdd("Last Frame", 16);
mSpreadInfo.RowAdd("Last Fr. Time", 17);
mSpreadInfo.RowAdd("Cur. Fr. Time", 18);
for(i=0;i<19;i++)
{
mSpreadInfo.GetRow(i).ReadOnly = true;
}
for(i=0;i<19;i++)
{
if( i == 0 || i ==1 || i==15 )
{
}
else
{
mSpreadInfo.GetCell(i,0).ReadOnly = true;
}
}
mLabelMedia.Caption = "Video List";
mEditNumberFrame.OnChange.Add (
this, (
FBCallback)&ORToolMedia::EventEditNumberFrameChange );
mButtonOpenVideo.OnClick.Add (
this, (
FBCallback)&ORToolMedia::EventButtonOpenVideoClick );
mButtonControlFrame.OnClick.Add (
this, (
FBCallback)&ORToolMedia::EventButtonControlFrameClick );
mSpreadInfo.OnCellChange.Add (
this, (
FBCallback)&ORToolMedia::EventSpreadInfoCellChange );
mListMedia.OnChange.Add (
this, (
FBCallback)&ORToolMedia::EventListMediaChange );
}
void ORToolMedia::UIReset()
{
FBVideoClip* lVideo;
mListMedia.Items.Clear();
for( int i=0; i< FBSystem::TheOne().Scene->VideoClips.GetCount(); i++)
{
lVideo = FBSystem::TheOne().Scene->VideoClips[
i];
mListMedia.Items.Add( lVideo->Name, (kReference)(lVideo));
}
lVideo = mViewImage.GetVideo();
if(lVideo)
{
mSpreadInfo.SetCell(0,0, lVideo->Name );
mSpreadInfo.SetCell(1,0, lVideo->Filename );
mSpreadInfo.SetCell(2,0, lVideo->ProxyMode.AsString() );
mSpreadInfo.SetCell(3,0, lVideo->StorageMode.AsString() );
mSpreadInfo.SetCell(4,0, lVideo->Width );
mSpreadInfo.SetCell(5,0, lVideo->Height );
mSpreadInfo.SetCell(6,0, ((FBTime)lVideo->TimeOffset).GetTimeString());
mSpreadInfo.SetCell(7,0, (int)lVideo->StartFrame );
mSpreadInfo.SetCell(8,0, (int)lVideo->StopFrame );
mSpreadInfo.SetCell(9,0, lVideo->FrameRate );
mSpreadInfo.SetCell(10,0, lVideo->PlaySpeed );
mSpreadInfo.SetCell(11,0, lVideo->InterlaceMode.AsString() );
mSpreadInfo.SetCell(12,0, lVideo->FreeRunning.AsString() );
mSpreadInfo.SetCell(13,0, lVideo->Loop.AsString() );
mSpreadInfo.SetCell(14,0, ((FBTime)lVideo->FrameTime).GetTimeString() );
mSpreadInfo.SetCell(15,0, (int)lVideo->CurrentFrame );
mSpreadInfo.SetCell(16,0, (int)lVideo->LastFrame );
mSpreadInfo.SetCell(17,0, ((FBTime)lVideo->LastFrameTime).GetTimeString());
mSpreadInfo.SetCell(18,0, ((FBTime)lVideo->CurrentFrameTime).GetTimeString());
mEditNumberFrame.Min = 0;
mEditNumberFrame.Max = lVideo->LastFrame;
mEditNumberFrame.Value = lVideo->CurrentFrame;
mListMedia.ItemIndex = mListMedia.Items.Find( (unsigned long) lVideo );
}
else
{
FBTime lZero;
mSpreadInfo.SetCell(0,0, "" );
mSpreadInfo.SetCell(1,0, "" );
mSpreadInfo.SetCell(2,0, "" );
mSpreadInfo.SetCell(3,0, "" );
mSpreadInfo.SetCell(4,0, 0 );
mSpreadInfo.SetCell(5,0, 0 );
mSpreadInfo.SetCell(6,0, lZero.GetTimeString() );
mSpreadInfo.SetCell(7,0, 0 );
mSpreadInfo.SetCell(8,0, 0 );
mSpreadInfo.SetCell(9,0, 0.0 );
mSpreadInfo.SetCell(10,0, 0.0 );
mSpreadInfo.SetCell(11,0, "" );
mSpreadInfo.SetCell(12,0, "" );
mSpreadInfo.SetCell(13,0, "" );
mSpreadInfo.SetCell(14,0, lZero.GetTimeString() );
mSpreadInfo.SetCell(15,0, 0 );
mSpreadInfo.SetCell(16,0, 0 );
mSpreadInfo.SetCell(17,0, lZero.GetTimeString() );
mSpreadInfo.SetCell(18,0, lZero.GetTimeString() );
mEditNumberFrame.Min = 0;
mEditNumberFrame.Max = 0;
}
mButtonControlFrame.State = mViewImage.GetControlFrame() ? 1:0;
}
{
UIReset();
mViewImage.Refresh();
}
{
FBEventShow lEvent( pEvent );
if( lEvent.Shown )
{
UIReset();
}
else
{
}
}
{
FBEventSpread lEvent(pEvent);
int lRow = lEvent.Row;
int lColumn = lEvent.Column;
const char* lString;
int lInteger;
if( mViewImage.GetVideo() && lColumn == 0 )
{
switch( lRow )
{
case 0:
{
mSpreadInfo.GetCell(lRow,lColumn,lString);
mViewImage.GetVideo()->Name = lString;
}
break;
case 1:
{
mSpreadInfo.GetCell(lRow,lColumn,lString);
mViewImage.GetVideo()->Filename = lString;
}
break;
case 15:
{
mSpreadInfo.GetCell(lRow,lColumn,lInteger);
mViewImage.GetVideo()->CurrentFrame = lInteger;
}
break;
}
}
}
{
FBFilePopup lPopup;
lPopup.Filter = "*.avi";
lPopup.Caption = "Select Video";
if(lPopup.Execute() == true)
{
FBVideoClip* lVideo = new FBVideoClip(lPopup.FullFilename );
mViewImage.SetVideo(lVideo);
mSpreadInfo.Caption = lVideo->Name;
}
UIReset();
}
{
if( mViewImage.GetControlFrame() )
{
if( mViewImage.GetVideo() )
{
mViewImage.GetVideo()->CurrentFrame = mEditNumberFrame.Value;
}
}
}
void ORToolMedia::EventButtonControlFrameClick(
HISender pSender,
HKEvent pEvent )
{
mViewImage.SetControlFrame( mButtonControlFrame.State != 0 );
mButtonControlFrame.State = mViewImage.GetControlFrame();
}
{
FBVideoClip* lVideo =
NULL;
lVideo = (FBVideoClip*) mListMedia.Items.GetReferenceAt( mListMedia.ItemIndex );
if( lVideo )
{
if( (FBString)lVideo->Filename != "" && lVideo->Width != 0 && lVideo->Height != 0 )
{
mViewImage.SetVideo( lVideo );
mSpreadInfo.Caption = lVideo->Name;
}
else
{
mViewImage.SetVideo(
NULL );
mSpreadInfo.Caption = STR_NOVIDEO;
}
}
UIReset();
}