| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/mediactrl.h
 
- // Purpose:     wxMediaCtrl class
 
- // Author:      Ryan Norton <wxprojects@comcast.net>
 
- // Modified by:
 
- // Created:     11/07/04
 
- // Copyright:   (c) Ryan Norton
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // ============================================================================
 
- // Definitions
 
- // ============================================================================
 
- // ----------------------------------------------------------------------------
 
- // Header guard
 
- // ----------------------------------------------------------------------------
 
- #ifndef _WX_MEDIACTRL_H_
 
- #define _WX_MEDIACTRL_H_
 
- // ----------------------------------------------------------------------------
 
- // Pre-compiled header stuff
 
- // ----------------------------------------------------------------------------
 
- #include "wx/defs.h"
 
- // ----------------------------------------------------------------------------
 
- // Compilation guard
 
- // ----------------------------------------------------------------------------
 
- #if wxUSE_MEDIACTRL
 
- // ----------------------------------------------------------------------------
 
- // Includes
 
- // ----------------------------------------------------------------------------
 
- #include "wx/control.h"
 
- #include "wx/uri.h"
 
- // ============================================================================
 
- // Declarations
 
- // ============================================================================
 
- // ----------------------------------------------------------------------------
 
- //
 
- // Enumerations
 
- //
 
- // ----------------------------------------------------------------------------
 
- enum wxMediaState
 
- {
 
-     wxMEDIASTATE_STOPPED,
 
-     wxMEDIASTATE_PAUSED,
 
-     wxMEDIASTATE_PLAYING
 
- };
 
- enum wxMediaCtrlPlayerControls
 
- {
 
-     wxMEDIACTRLPLAYERCONTROLS_NONE           =   0,
 
-     //Step controls like fastforward, step one frame etc.
 
-     wxMEDIACTRLPLAYERCONTROLS_STEP           =   1 << 0,
 
-     //Volume controls like the speaker icon, volume slider, etc.
 
-     wxMEDIACTRLPLAYERCONTROLS_VOLUME         =   1 << 1,
 
-     wxMEDIACTRLPLAYERCONTROLS_DEFAULT        =
 
-                     wxMEDIACTRLPLAYERCONTROLS_STEP |
 
-                     wxMEDIACTRLPLAYERCONTROLS_VOLUME
 
- };
 
- #define wxMEDIABACKEND_DIRECTSHOW   wxT("wxAMMediaBackend")
 
- #define wxMEDIABACKEND_MCI          wxT("wxMCIMediaBackend")
 
- #define wxMEDIABACKEND_QUICKTIME    wxT("wxQTMediaBackend")
 
- #define wxMEDIABACKEND_GSTREAMER    wxT("wxGStreamerMediaBackend")
 
- #define wxMEDIABACKEND_REALPLAYER   wxT("wxRealPlayerMediaBackend")
 
- #define wxMEDIABACKEND_WMP10        wxT("wxWMP10MediaBackend")
 
- // ----------------------------------------------------------------------------
 
- //
 
- // wxMediaEvent
 
- //
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_MEDIA wxMediaEvent : public wxNotifyEvent
 
- {
 
- public:
 
-     // ------------------------------------------------------------------------
 
-     // wxMediaEvent Constructor
 
-     //
 
-     // Normal constructor, much the same as wxNotifyEvent
 
-     // ------------------------------------------------------------------------
 
-     wxMediaEvent(wxEventType commandType = wxEVT_NULL, int winid = 0)
 
-         : wxNotifyEvent(commandType, winid)
 
-     {                                       }
 
-     // ------------------------------------------------------------------------
 
-     // wxMediaEvent Copy Constructor
 
-     //
 
-     // Normal copy constructor, much the same as wxNotifyEvent
 
-     // ------------------------------------------------------------------------
 
-     wxMediaEvent(const wxMediaEvent &clone)
 
-             : wxNotifyEvent(clone)
 
-     {                                       }
 
-     // ------------------------------------------------------------------------
 
-     // wxMediaEvent::Clone
 
-     //
 
-     // Allocates a copy of this object.
 
-     // Required for wxEvtHandler::AddPendingEvent
 
-     // ------------------------------------------------------------------------
 
-     virtual wxEvent *Clone() const
 
-     {   return new wxMediaEvent(*this);     }
 
-     // Put this class on wxWidget's RTTI table
 
-     DECLARE_DYNAMIC_CLASS(wxMediaEvent)
 
- };
 
- // ----------------------------------------------------------------------------
 
- //
 
- // wxMediaCtrl
 
- //
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_MEDIA wxMediaCtrl : public wxControl
 
- {
 
- public:
 
-     wxMediaCtrl() : m_imp(NULL), m_bLoaded(false)
 
-     {                                                                   }
 
-     wxMediaCtrl(wxWindow* parent, wxWindowID winid,
 
-                 const wxString& fileName = wxEmptyString,
 
-                 const wxPoint& pos = wxDefaultPosition,
 
-                 const wxSize& size = wxDefaultSize,
 
-                 long style = 0,
 
-                 const wxString& szBackend = wxEmptyString,
 
-                 const wxValidator& validator = wxDefaultValidator,
 
-                 const wxString& name = wxT("mediaCtrl"))
 
-                 : m_imp(NULL), m_bLoaded(false)
 
-     {   Create(parent, winid, fileName, pos, size, style,
 
-                szBackend, validator, name);                             }
 
-     wxMediaCtrl(wxWindow* parent, wxWindowID winid,
 
-                 const wxURI& location,
 
-                 const wxPoint& pos = wxDefaultPosition,
 
-                 const wxSize& size = wxDefaultSize,
 
-                 long style = 0,
 
-                 const wxString& szBackend = wxEmptyString,
 
-                 const wxValidator& validator = wxDefaultValidator,
 
-                 const wxString& name = wxT("mediaCtrl"))
 
-                 : m_imp(NULL), m_bLoaded(false)
 
-     {   Create(parent, winid, location, pos, size, style,
 
-                szBackend, validator, name);                             }
 
-     virtual ~wxMediaCtrl();
 
-     bool Create(wxWindow* parent, wxWindowID winid,
 
-                 const wxString& fileName = wxEmptyString,
 
-                 const wxPoint& pos = wxDefaultPosition,
 
-                 const wxSize& size = wxDefaultSize,
 
-                 long style = 0,
 
-                 const wxString& szBackend = wxEmptyString,
 
-                 const wxValidator& validator = wxDefaultValidator,
 
-                 const wxString& name = wxT("mediaCtrl"));
 
-     bool Create(wxWindow* parent, wxWindowID winid,
 
-                 const wxURI& location,
 
-                 const wxPoint& pos = wxDefaultPosition,
 
-                 const wxSize& size = wxDefaultSize,
 
-                 long style = 0,
 
-                 const wxString& szBackend = wxEmptyString,
 
-                 const wxValidator& validator = wxDefaultValidator,
 
-                 const wxString& name = wxT("mediaCtrl"));
 
-     bool DoCreate(const wxClassInfo* instance,
 
-                 wxWindow* parent, wxWindowID winid,
 
-                 const wxPoint& pos = wxDefaultPosition,
 
-                 const wxSize& size = wxDefaultSize,
 
-                 long style = 0,
 
-                 const wxValidator& validator = wxDefaultValidator,
 
-                 const wxString& name = wxT("mediaCtrl"));
 
-     bool Play();
 
-     bool Pause();
 
-     bool Stop();
 
-     bool Load(const wxString& fileName);
 
-     wxMediaState GetState();
 
-     wxFileOffset Seek(wxFileOffset where, wxSeekMode mode = wxFromStart);
 
-     wxFileOffset Tell(); //FIXME: This should be const
 
-     wxFileOffset Length(); //FIXME: This should be const
 
-     double GetPlaybackRate();           //All but MCI & GStreamer
 
-     bool SetPlaybackRate(double dRate); //All but MCI & GStreamer
 
-     bool Load(const wxURI& location);
 
-     bool Load(const wxURI& location, const wxURI& proxy);
 
-     wxFileOffset GetDownloadProgress(); // DirectShow only
 
-     wxFileOffset GetDownloadTotal();    // DirectShow only
 
-     double GetVolume();
 
-     bool   SetVolume(double dVolume);
 
-     bool    ShowPlayerControls(
 
-         wxMediaCtrlPlayerControls flags = wxMEDIACTRLPLAYERCONTROLS_DEFAULT);
 
-     //helpers for the wxPython people
 
-     bool LoadURI(const wxString& fileName)
 
-     {   return Load(wxURI(fileName));       }
 
-     bool LoadURIWithProxy(const wxString& fileName, const wxString& proxy)
 
-     {   return Load(wxURI(fileName), wxURI(proxy));       }
 
- protected:
 
-     static const wxClassInfo* NextBackend(wxClassInfo::const_iterator* it);
 
-     void OnMediaFinished(wxMediaEvent& evt);
 
-     virtual void DoMoveWindow(int x, int y, int w, int h);
 
-     wxSize DoGetBestSize() const;
 
-     //FIXME:  This is nasty... find a better way to work around
 
-     //inheritance issues
 
- #if defined(__WXOSX_CARBON__)
 
-     virtual void MacVisibilityChanged();
 
- #endif
 
- #if defined(__WXOSX_CARBON__) || defined(__WXCOCOA__)
 
-     friend class wxQTMediaBackend;
 
- #endif
 
-     class wxMediaBackend* m_imp;
 
-     bool m_bLoaded;
 
-     DECLARE_DYNAMIC_CLASS(wxMediaCtrl)
 
- };
 
- // ----------------------------------------------------------------------------
 
- //
 
- // wxMediaBackend
 
- //
 
- // Derive from this and use standard wxWidgets RTTI
 
- // (DECLARE_DYNAMIC_CLASS and IMPLEMENT_CLASS) to make a backend
 
- // for wxMediaCtrl.  Backends are searched alphabetically -
 
- // the one with the earliest letter is tried first.
 
- //
 
- // Note that this is currently not API or ABI compatible -
 
- // so statically link or make the client compile on-site.
 
- //
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_MEDIA wxMediaBackend : public wxObject
 
- {
 
- public:
 
-     wxMediaBackend()
 
-     {                                   }
 
-     virtual ~wxMediaBackend();
 
-     virtual bool CreateControl(wxControl* WXUNUSED(ctrl),
 
-                                wxWindow* WXUNUSED(parent),
 
-                                wxWindowID WXUNUSED(winid),
 
-                                const wxPoint& WXUNUSED(pos),
 
-                                const wxSize& WXUNUSED(size),
 
-                                long WXUNUSED(style),
 
-                                const wxValidator& WXUNUSED(validator),
 
-                                const wxString& WXUNUSED(name))
 
-     {   return false;                   }
 
-     virtual bool Play()
 
-     {   return false;                   }
 
-     virtual bool Pause()
 
-     {   return false;                   }
 
-     virtual bool Stop()
 
-     {   return false;                   }
 
-     virtual bool Load(const wxString& WXUNUSED(fileName))
 
-     {   return false;                   }
 
-     virtual bool Load(const wxURI& WXUNUSED(location))
 
-     {   return false;                   }
 
-     virtual bool SetPosition(wxLongLong WXUNUSED(where))
 
-     {   return 0;                       }
 
-     virtual wxLongLong GetPosition()
 
-     {   return 0;                       }
 
-     virtual wxLongLong GetDuration()
 
-     {   return 0;                       }
 
-     virtual void Move(int WXUNUSED(x), int WXUNUSED(y),
 
-                       int WXUNUSED(w), int WXUNUSED(h))
 
-     {                                   }
 
-     virtual wxSize GetVideoSize() const
 
-     {   return wxSize(0,0);             }
 
-     virtual double GetPlaybackRate()
 
-     {   return 0.0;                     }
 
-     virtual bool SetPlaybackRate(double WXUNUSED(dRate))
 
-     {   return false;                   }
 
-     virtual wxMediaState GetState()
 
-     {   return wxMEDIASTATE_STOPPED;    }
 
-     virtual double GetVolume()
 
-     {   return 0.0;                     }
 
-     virtual bool SetVolume(double WXUNUSED(dVolume))
 
-     {   return false;                   }
 
-     virtual bool Load(const wxURI& WXUNUSED(location),
 
-                       const wxURI& WXUNUSED(proxy))
 
-     {   return false;                   }
 
-     virtual bool   ShowPlayerControls(
 
-                     wxMediaCtrlPlayerControls WXUNUSED(flags))
 
-     {   return false;                   }
 
-     virtual bool   IsInterfaceShown()
 
-     {   return false;                   }
 
-     virtual wxLongLong GetDownloadProgress()
 
-     {    return 0;                      }
 
-     virtual wxLongLong GetDownloadTotal()
 
-     {    return 0;                      }
 
-     virtual void MacVisibilityChanged()
 
-     {                                   }
 
-     virtual void RESERVED9() {}
 
-     DECLARE_DYNAMIC_CLASS(wxMediaBackend)
 
- };
 
- //Our events
 
- wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_FINISHED, wxMediaEvent );
 
- wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_STOP, wxMediaEvent );
 
- //Function type(s) our events need
 
- typedef void (wxEvtHandler::*wxMediaEventFunction)(wxMediaEvent&);
 
- #define wxMediaEventHandler(func) \
 
-     wxEVENT_HANDLER_CAST(wxMediaEventFunction, func)
 
- //Macro for usage with message maps
 
- #define EVT_MEDIA_FINISHED(winid, fn)   wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_FINISHED, winid, wxID_ANY, wxMediaEventHandler(fn), NULL ),
 
- #define EVT_MEDIA_STOP(winid, fn)       wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_STOP, winid, wxID_ANY, wxMediaEventHandler(fn), NULL ),
 
- wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_LOADED, wxMediaEvent );
 
- #define EVT_MEDIA_LOADED(winid, fn)     wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_LOADED, winid, wxID_ANY, wxMediaEventHandler(fn), NULL ),
 
- wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_STATECHANGED, wxMediaEvent );
 
- wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_PLAY, wxMediaEvent );
 
- wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_PAUSE, wxMediaEvent );
 
- #define EVT_MEDIA_STATECHANGED(winid, fn)   wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_STATECHANGED, winid, wxID_ANY, wxMediaEventHandler(fn), NULL ),
 
- #define EVT_MEDIA_PLAY(winid, fn)           wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_PLAY, winid, wxID_ANY, wxMediaEventHandler(fn), NULL ),
 
- #define EVT_MEDIA_PAUSE(winid, fn)          wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_PAUSE, winid, wxID_ANY, wxMediaEventHandler(fn), NULL ),
 
- // ----------------------------------------------------------------------------
 
- // common backend base class used by many other backends
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_MEDIA wxMediaBackendCommonBase : public wxMediaBackend
 
- {
 
- public:
 
-     // add a pending wxMediaEvent of the given type
 
-     void QueueEvent(wxEventType evtType);
 
-     // notify that the movie playback is finished
 
-     void QueueFinishEvent()
 
-     {
 
-         QueueEvent(wxEVT_MEDIA_STATECHANGED);
 
-         QueueEvent(wxEVT_MEDIA_FINISHED);
 
-     }
 
-     // send the stop event and return true if it hasn't been vetoed
 
-     bool SendStopEvent();
 
-     // Queue pause event
 
-     void QueuePlayEvent();
 
-     // Queue pause event
 
-     void QueuePauseEvent();
 
-     // Queue stop event (no veto)
 
-     void QueueStopEvent();
 
- protected:
 
-     // call this when the movie size has changed but not because it has just
 
-     // been loaded (in this case, call NotifyMovieLoaded() below)
 
-     void NotifyMovieSizeChanged();
 
-     // call this when the movie is fully loaded
 
-     void NotifyMovieLoaded();
 
-     wxMediaCtrl *m_ctrl;      // parent control
 
- };
 
- // ----------------------------------------------------------------------------
 
- // End compilation guard
 
- // ----------------------------------------------------------------------------
 
- #endif // wxUSE_MEDIACTRL
 
- // ----------------------------------------------------------------------------
 
- // End header guard and header itself
 
- // ----------------------------------------------------------------------------
 
- #endif // _WX_MEDIACTRL_H_
 
 
  |