]> git.saurik.com Git - wxWidgets.git/commitdiff
allow multiple movie loading as per Julian's suggestion. DOC.
authorRyan Norton <wxprojects@comcast.net>
Sun, 7 Nov 2004 12:22:11 +0000 (12:22 +0000)
committerRyan Norton <wxprojects@comcast.net>
Sun, 7 Nov 2004 12:22:11 +0000 (12:22 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30339 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/moviectrl.tex
include/wx/mac/carbon/moviectrl.h
include/wx/msw/moviectrl.h
src/mac/carbon/moviectrl.cpp
src/msw/moviectrl.cpp

index 7ca1e5da95c313a15ba40d188451a2b567b1b3b9..b4d5e582bffacaf1c5a422366cf18bdd9f336151 100644 (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}
 
index 6102095df572272ff64208456d8ffcf0fe86d203..ac6ab9a8ee82c93a75833196a5ec101c30677c45 100644 (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;
index b7498552a38af6315decf8ddad113a98413d9398..d1b1c1026d6327c70b8fdea561e98b7747d80d84 100644 (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);
index f4d141f78721520f282e8894db99dba13f4f2913..b8568251489ac6b3e98dca738f273bf787574d15 100644 (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;
 }
 
-wxMovieCtrl::~wxMovieCtrl()
+void wxMovieCtrl::Cleanup()
 {
-    if (m_timer)
-    {
-        delete m_timer;
+    //soldier in OnSize
+    this->Disconnect( wxID_ANY,
+    wxEVT_SIZE,
+    (wxObjectEventFunction) (wxEventFunction) (wxSizeEventFunction) &wxMovieCtrl::OnSize );
 
-        StopMovie(m_movie);
-        DisposeMovie(m_movie);
-        
-        //Note that ExitMovies() is not neccessary, but
-        //the docs are fuzzy on whether or not TerminateQTML is
-        ExitMovies();
+    delete m_timer;
 
-    #ifndef __WXMAC__
-        TerminateQTML();
-    #endif
-    }
+    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_bLoaded)
+        Cleanup();
 }
 
 wxSize wxMovieCtrl::DoGetBestSize() const
index 6b2de258f2f6725ce65d70caad9fa9fe5469a78e..7917b6382bbc9de0ee5db290f52482e6d957363f 100644 (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;