X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ce756cb06a93facb4faa35a1d57c7038fc26e8e1..03319b655c0a672e255a5b64e5caeed7c3e93fac:/include/wx/mediactrl.h diff --git a/include/wx/mediactrl.h b/include/wx/mediactrl.h index 001eb73e55..fbd3fe2c5c 100644 --- a/include/wx/mediactrl.h +++ b/include/wx/mediactrl.h @@ -26,9 +26,12 @@ #pragma interface "mediactrl.h" #endif +#include "wx/defs.h" + // ---------------------------------------------------------------------------- // Compilation guard // ---------------------------------------------------------------------------- + #if wxUSE_MEDIACTRL // ---------------------------------------------------------------------------- @@ -55,11 +58,24 @@ enum wxMediaState wxMEDIASTATE_PLAYING }; +enum wxMediaCtrlPlayerControls +{ + wxMEDIACTRLPLAYERCONTROLS_NONE = 0, + //Step controls like fastfoward, 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") + // ---------------------------------------------------------------------------- // // wxMediaEvent @@ -110,7 +126,7 @@ public: class WXDLLIMPEXP_MEDIA wxMediaCtrl : public wxControl { public: - wxMediaCtrl() : m_imp(NULL), m_bLoaded(false), m_bLoop(false) + wxMediaCtrl() : m_imp(NULL), m_bLoaded(false) { } wxMediaCtrl(wxWindow* parent, wxWindowID winid, @@ -121,7 +137,7 @@ public: const wxString& szBackend = wxEmptyString, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxT("mediaCtrl")) - : m_imp(NULL), m_bLoaded(false), m_bLoop(false) + : m_imp(NULL), m_bLoaded(false) { Create(parent, winid, fileName, pos, size, style, szBackend, validator, name); } @@ -133,7 +149,7 @@ public: const wxString& szBackend = wxEmptyString, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxT("mediaCtrl")) - : m_imp(NULL), m_bLoop(false) + : m_imp(NULL), m_bLoaded(false) { Create(parent, winid, location, pos, size, style, szBackend, validator, name); } @@ -155,7 +171,7 @@ public: long style = 0, const wxString& szBackend = wxEmptyString, const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxT("mediaCtrl")); //DirectShow only + const wxString& name = wxT("mediaCtrl")); bool DoCreate(wxClassInfo* instance, wxWindow* parent, wxWindowID winid, @@ -170,20 +186,37 @@ public: bool Stop(); bool Load(const wxString& fileName); - bool Load(const wxURI& location); //DirectShow only - - void Loop(bool bLoop = true); - bool IsLooped(); wxMediaState GetState(); - double GetPlaybackRate(); //All but MCI - bool SetPlaybackRate(double dRate); //All but MCI - wxFileOffset Seek(wxFileOffset where, wxSeekMode mode = wxFromStart); wxFileOffset Tell(); //FIXME: This should be const wxFileOffset Length(); //FIXME: This should be const +#if wxABI_VERSION >= 20601 /* 2.6.1+ only */ + double GetPlaybackRate(); //All but MCI & GStreamer + bool SetPlaybackRate(double dRate); //All but MCI & GStreamer +#endif + +#if wxABI_VERSION >= 20602 /* 2.6.2+ only */ + bool Load(const wxURI& location); + bool Load(const wxURI& location, const wxURI& proxy); + + wxFileOffset GetDownloadProgress(); + wxFileOffset GetDownloadTotal(); + + 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)); } +#endif protected: static wxClassInfo* NextBackend(); @@ -191,15 +224,13 @@ protected: virtual void DoMoveWindow(int x, int y, int w, int h); wxSize DoGetBestSize() const; -#ifdef __WXMAC__ - friend class wxQTMediaBackend; -#endif -#ifdef __WXCOCOA__ + //FIXME: This is nasty... find a better way to work around + //inheritance issues +#if defined(__WXMAC__) || defined(__WXCOCOA__) friend class wxQTMediaBackend; #endif class wxMediaBackend* m_imp; bool m_bLoaded; - bool m_bLoop; DECLARE_DYNAMIC_CLASS(wxMediaCtrl) }; @@ -208,7 +239,13 @@ protected: // // wxMediaBackend // -// Currently an internal class - API stability not guaranteed. +// 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 compatable - +// so statically link or make the client compile on-site. // // ---------------------------------------------------------------------------- @@ -253,7 +290,7 @@ public: int WXUNUSED(w), int WXUNUSED(h)) { } virtual wxSize GetVideoSize() const - { return wxSize(); } + { return wxSize(0,0); } virtual double GetPlaybackRate() { return 0.0; } @@ -263,6 +300,29 @@ public: 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 RESERVED8() {} + virtual void RESERVED9() {} + DECLARE_DYNAMIC_CLASS(wxMediaBackend) }; @@ -277,9 +337,18 @@ DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_STOP, wxMEDIA_STO //Function type(s) our events need typedef void (wxEvtHandler::*wxMediaEventFunction)(wxMediaEvent&); +#define wxMediaEventHandler(func) \ + (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMediaEventFunction, &func) + //Macro for usage with message maps -#define EVT_MEDIA_FINISHED(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_FINISHED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMediaEventFunction) & fn, (wxObject *) NULL ), -#define EVT_MEDIA_STOP(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_STOP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMediaEventFunction) & fn, (wxObject *) NULL ), +#define EVT_MEDIA_FINISHED(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_FINISHED, winid, wxID_ANY, wxMediaEventHandler(fn), (wxObject *) NULL ), +#define EVT_MEDIA_STOP(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_STOP, winid, wxID_ANY, wxMediaEventHandler(fn), (wxObject *) NULL ), + +#if wxABI_VERSION >= 20602 /* 2.6.2+ only */ +# define wxMEDIA_LOADED_ID 13002 + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_LOADED, wxMEDIA_LOADED_ID) +# define EVT_MEDIA_LOADED(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_LOADED, winid, wxID_ANY, wxMediaEventHandler(fn), (wxObject *) NULL ), +#endif // ---------------------------------------------------------------------------- // End compilation gaurd