allow multiple movie loading as per Julian's suggestion. DOC.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30339 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Ryan Norton
2004-11-07 12:22:11 +00:00
parent 5687a67ce1
commit 3a774635dc
5 changed files with 117 additions and 47 deletions

View File

@@ -38,7 +38,7 @@ Contructors
\docparam{parent}{parent of this control. Must not be NULL.}
\docparam{id}{id to use for events}
\docparam{fileName}{File the movie is located at.}
\docparam{fileName}{If not empty, loads this file and starts playing it immediately.}
\docparam{label}{Control label - possible caption for the movie.}
\docparam{pos}{Position to put control at.}
\docparam{size}{Size to put the control at and to stretch movie to.}
@@ -55,7 +55,7 @@ Creates this control. Returns \tt{false} if it can't load the movie located at
\docparam{parent}{parent of this control. Must not be NULL.}
\docparam{id}{id to use for events}
\docparam{fileName}{File the movie is located at.}
\docparam{fileName}{If not empty, loads this file and starts playing it immediately.}
\docparam{label}{Control label - possible caption for the movie.}
\docparam{pos}{Position to put control at.}
\docparam{size}{Size to put the control at and to stretch movie to.}
@@ -90,6 +90,13 @@ Obtains the state the playback of the movie is in -
Obtains the length - the total amount of time the movie has
\membersection{wxMovieCtrl::Load}\label{wxmoviectrlload}
\func{bool}{Load}{\param{const wxString\& }{fileName}}
Loads the file that \tt{fileName} refers to.
Unlike Create, you must manually call Play() to start playing the file.
\membersection{wxMovieCtrl::Pause}\label{wxmoviectrlpause}

View File

@@ -26,12 +26,12 @@ enum wxMovieCtrlState
class wxMovieCtrl : public wxControl
{
public:
wxMovieCtrl()
wxMovieCtrl() : m_bLoaded(false)
{ }
wxMovieCtrl(wxWindow* parent, wxWindowID id, const wxString& fileName, const wxString& label = wxT(""),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = 0, const wxString& name = wxPanelNameStr)
long style = 0, const wxString& name = wxPanelNameStr) : m_bLoaded(false)
{ Create(parent, id, fileName, label, pos, size, style, name); }
~wxMovieCtrl();
@@ -49,6 +49,8 @@ public:
double GetPlaybackRate();
bool SetPlaybackRate(double dRate);
bool Load(const wxString& fileName);
#if wxUSE_DATETIME
bool Seek(const wxTimeSpan& where);
wxTimeSpan Tell();
@@ -59,6 +61,9 @@ protected:
void OnSize(wxSizeEvent& evt);
wxSize DoGetBestSize() const;
bool InitQT();
void Cleanup();
bool m_bLoaded;
struct MovieRecord* m_movie;
wxSize m_bestSize;

View File

@@ -26,12 +26,12 @@ enum wxMovieCtrlState
class wxMovieCtrl : public wxControl
{
public:
wxMovieCtrl()
wxMovieCtrl() : m_bLoaded(false)
{ }
wxMovieCtrl(wxWindow* parent, wxWindowID id, const wxString& fileName, const wxString& label = wxT(""),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = 0, const wxString& name = wxPanelNameStr)
long style = 0, const wxString& name = wxPanelNameStr) : m_bLoaded(false)
{ Create(parent, id, fileName, label, pos, size, style, name); }
~wxMovieCtrl();
@@ -43,6 +43,8 @@ public:
bool Play();
bool Pause();
bool Stop();
bool Load(const wxString& fileName);
wxMovieCtrlState GetState();
@@ -60,7 +62,10 @@ public:
protected:
void OnSize(wxSizeEvent& evt);
wxSize DoGetBestSize() const;
void Cleanup();
bool m_bVideo;
bool m_bLoaded;
//msw-specific - we need to overload the window proc
WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);

View File

@@ -130,6 +130,34 @@ bool wxMovieCtrl::Create(wxWindow* parent, wxWindowID id, const wxString& fileNa
const wxString& label, const wxPoint& pos, const wxSize& size,
long WXUNUSED(style), const wxString& name)
{
//do some window stuff
if ( !wxControl::Create(parent, id, pos, size, wxNO_BORDER, wxDefaultValidator, name) )
return false;
//Set our background color to black by default
SetBackgroundColour(*wxBLACK);
if(!fileName.empty())
{
if (!Load(fileName))
return false;
SetLabel(label);
if(!Play())
return false;
}
else
wxControl::SetLabel(label);
return true;
}
bool wxMovieCtrl::Load(const wxString& fileName)
{
if(m_bLoaded)
Cleanup();
if ( !InitQT() )
return false;
@@ -186,13 +214,6 @@ bool wxMovieCtrl::Create(wxWindow* parent, wxWindowID id, const wxString& fileNa
wxEVT_SIZE,
(wxObjectEventFunction) (wxEventFunction) (wxSizeEventFunction) &wxMovieCtrl::OnSize );
//do some window stuff
if ( !wxControl::Create(parent, id, pos, size, wxNO_BORDER, wxDefaultValidator, name) )
return false;
//Set our background color to black by default
SetBackgroundColour(*wxBLACK);
//reparent movie
#ifdef __WXMSW__
CreatePortAssociation(this->GetHWND(), NULL, 0L);
@@ -206,13 +227,10 @@ bool wxMovieCtrl::Create(wxWindow* parent, wxWindowID id, const wxString& fileNa
#endif
, nil);
//go!
SetLabel(label);
Play();
return true;
}
bool wxMovieCtrl::Play()
{
::StartMovie(m_movie);
@@ -290,23 +308,31 @@ wxMovieCtrlState wxMovieCtrl::GetState()
return wxMOVIECTRL_PAUSED;
}
void wxMovieCtrl::Cleanup()
{
//soldier in OnSize
this->Disconnect( wxID_ANY,
wxEVT_SIZE,
(wxObjectEventFunction) (wxEventFunction) (wxSizeEventFunction) &wxMovieCtrl::OnSize );
delete m_timer;
StopMovie(m_movie);
DisposeMovie(m_movie);
//Note that ExitMovies() is not neccessary, but
//the docs are fuzzy on whether or not TerminateQTML is
ExitMovies();
#ifndef __WXMAC__
TerminateQTML();
#endif
}
wxMovieCtrl::~wxMovieCtrl()
{
if (m_timer)
{
delete m_timer;
StopMovie(m_movie);
DisposeMovie(m_movie);
//Note that ExitMovies() is not neccessary, but
//the docs are fuzzy on whether or not TerminateQTML is
ExitMovies();
#ifndef __WXMAC__
TerminateQTML();
#endif
}
if(m_bLoaded)
Cleanup();
}
wxSize wxMovieCtrl::DoGetBestSize() const

View File

@@ -51,6 +51,35 @@ bool wxMovieCtrl::Create(wxWindow* parent, wxWindowID id, const wxString& fileNa
const wxString& label, const wxPoint& pos, const wxSize& size,
long style, const wxString& name)
{
//do some window stuff - ORDER IS IMPORTANT
//base create
if ( !wxControl::Create(parent, id, pos, size, wxNO_BORDER | wxCLIP_CHILDREN, wxDefaultValidator, name) )
return false;
//Set our background color to black by default
SetBackgroundColour(*wxBLACK);
if(!fileName.empty())
{
if (!Load(fileName))
return false;
SetLabel(label);
if(!Play())
return false;
}
else
wxControl::SetLabel(label);
return true;
}
bool wxMovieCtrl::Load(const wxString& fileName)
{
if(m_bLoaded)
Cleanup();
//cast helpers
IGraphBuilder*& pGB = (IGraphBuilder*&) m_pGB;
IMediaControl*& pMC = (IMediaControl*&) m_pMC;
@@ -95,17 +124,6 @@ bool wxMovieCtrl::Create(wxWindow* parent, wxWindowID id, const wxString& fileNa
m_bestSize.x = nSX;
m_bestSize.y = nSY;
//do some window stuff - ORDER IS IMPORTANT
//base create
if ( !wxControl::Create(parent, id, pos, size, wxNO_BORDER | wxCLIP_CHILDREN, wxDefaultValidator, name) )
return false;
//TODO: Connect() here instead of message maps
//Set our background color to black by default
SetBackgroundColour(*wxBLACK);
if (m_bVideo)
{
wxDSVERIFY( pVW->put_Owner((OAHWND)this->GetHandle()) );
@@ -117,9 +135,7 @@ bool wxMovieCtrl::Create(wxWindow* parent, wxWindowID id, const wxString& fileNa
//set the time format
wxDSVERIFY( pMS->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME) );
SetLabel(label);
Play();
m_bLoaded = true;
return true;
}
@@ -277,8 +293,13 @@ WXLRESULT wxMovieCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPar
return wxControl::MSWWindowProc(nMsg, wParam, lParam);
}
wxMovieCtrl::~wxMovieCtrl()
void wxMovieCtrl::Cleanup()
{
if(m_bVideo)
this->Disconnect( wxID_ANY,
wxEVT_SIZE,
(wxObjectEventFunction) (wxEventFunction) (wxSizeEventFunction) &wxMovieCtrl::OnSize );
//cast helpers
IGraphBuilder*& pGB = (IGraphBuilder*&) m_pGB;
IMediaControl*& pMC = (IMediaControl*&) m_pMC;
@@ -305,6 +326,12 @@ wxMovieCtrl::~wxMovieCtrl()
SAFE_RELEASE(pGB);
}
wxMovieCtrl::~wxMovieCtrl()
{
if (m_bLoaded)
Cleanup();
}
wxSize wxMovieCtrl::DoGetBestSize() const
{
return m_bestSize;