X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..f239a20092359e3c914adb79bd39f3f5d2b2e06f:/src/common/mediactrlcmn.cpp?ds=inline diff --git a/src/common/mediactrlcmn.cpp b/src/common/mediactrlcmn.cpp index 1762093574..555c6e71e3 100644 --- a/src/common/mediactrlcmn.cpp +++ b/src/common/mediactrlcmn.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: common/mediactrl.cpp +// Name: src/common/mediactrlcmn.cpp // Purpose: wxMediaCtrl common code // Author: Ryan Norton // Modified by: @@ -9,31 +9,31 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +// TODO: Platform specific backend defaults? + //=========================================================================== -// Definitions +// Declarations //=========================================================================== //--------------------------------------------------------------------------- -// Pre-compiled header stuff +// Includes //--------------------------------------------------------------------------- #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif -//--------------------------------------------------------------------------- -// Includes -//--------------------------------------------------------------------------- -#include "wx/mediactrl.h" -#include "wx/hash.h" - -//--------------------------------------------------------------------------- -// Compilation guard -//--------------------------------------------------------------------------- #if wxUSE_MEDIACTRL +#ifndef WX_PRECOMP + #include "wx/hash.h" + #include "wx/log.h" +#endif + +#include "wx/mediactrl.h" + //=========================================================================== // // Implementation @@ -44,12 +44,15 @@ // RTTI and Event implementations //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -IMPLEMENT_CLASS(wxMediaCtrl, wxControl); -IMPLEMENT_CLASS(wxMediaBackend, wxObject); -IMPLEMENT_DYNAMIC_CLASS(wxMediaEvent, wxEvent); -DEFINE_EVENT_TYPE(wxEVT_MEDIA_FINISHED); -DEFINE_EVENT_TYPE(wxEVT_MEDIA_LOADED); -DEFINE_EVENT_TYPE(wxEVT_MEDIA_STOP); +IMPLEMENT_CLASS(wxMediaCtrl, wxControl) +wxDEFINE_EVENT( wxEVT_MEDIA_STATECHANGED, wxMediaEvent ); +wxDEFINE_EVENT( wxEVT_MEDIA_PLAY, wxMediaEvent ); +wxDEFINE_EVENT( wxEVT_MEDIA_PAUSE, wxMediaEvent ); +IMPLEMENT_CLASS(wxMediaBackend, wxObject) +IMPLEMENT_DYNAMIC_CLASS(wxMediaEvent, wxEvent) +wxDEFINE_EVENT( wxEVT_MEDIA_FINISHED, wxMediaEvent ); +wxDEFINE_EVENT( wxEVT_MEDIA_LOADED, wxMediaEvent ); +wxDEFINE_EVENT( wxEVT_MEDIA_STOP, wxMediaEvent ); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // @@ -104,22 +107,21 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, { if (!Load(fileName)) { - delete m_imp; - m_imp = NULL; + wxDELETE(m_imp); return false; } } - SetBestFittingSize(size); + SetInitialSize(size); return true; } else { - wxClassInfo::sm_classTable->BeginFind(); + wxClassInfo::const_iterator it = wxClassInfo::begin_classinfo(); - wxClassInfo* classInfo; + const wxClassInfo* classInfo; - while((classInfo = NextBackend()) != NULL) + while((classInfo = NextBackend(&it)) != NULL) { if(!DoCreate(classInfo, parent, id, pos, size, style, validator, name)) @@ -129,7 +131,7 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, { if (Load(fileName)) { - SetBestFittingSize(size); + SetInitialSize(size); return true; } else @@ -137,7 +139,7 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, } else { - SetBestFittingSize(size); + SetInitialSize(size); return true; } } @@ -168,21 +170,20 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, if (!Load(location)) { - delete m_imp; - m_imp = NULL; + wxDELETE(m_imp); return false; } - SetBestFittingSize(size); + SetInitialSize(size); return true; } else { - wxClassInfo::sm_classTable->BeginFind(); + wxClassInfo::const_iterator it = wxClassInfo::begin_classinfo(); - wxClassInfo* classInfo; + const wxClassInfo* classInfo; - while((classInfo = NextBackend()) != NULL) + while((classInfo = NextBackend(&it)) != NULL) { if(!DoCreate(classInfo, parent, id, pos, size, style, validator, name)) @@ -190,7 +191,7 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, if (Load(location)) { - SetBestFittingSize(size); + SetInitialSize(size); return true; } else @@ -207,7 +208,7 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, // // Attempts to create the control from a backend //--------------------------------------------------------------------------- -bool wxMediaCtrl::DoCreate(wxClassInfo* classInfo, +bool wxMediaCtrl::DoCreate(const wxClassInfo* classInfo, wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, @@ -228,7 +229,7 @@ bool wxMediaCtrl::DoCreate(wxClassInfo* classInfo, } //--------------------------------------------------------------------------- -// wxMediaCtrl::NextBackend +// wxMediaCtrl::NextBackend (static) // // // Search through the RTTI hashmap one at a @@ -239,22 +240,20 @@ bool wxMediaCtrl::DoCreate(wxClassInfo* classInfo, // STL isn't compatible with and will have a compilation error // on a wxNode, however, wxHashTable::compatibility_iterator is // incompatible with the old 2.4 stable version - but since -// we're in 2.5 only we don't need to worry about this -// static +// we're in 2.5+ only we don't need to worry about the new version //--------------------------------------------------------------------------- -wxClassInfo* wxMediaCtrl::NextBackend() +const wxClassInfo* wxMediaCtrl::NextBackend(wxClassInfo::const_iterator* it) { - wxHashTable::compatibility_iterator - node = wxClassInfo::sm_classTable->Next(); - while (node) + for ( wxClassInfo::const_iterator end = wxClassInfo::end_classinfo(); + *it != end; ++(*it) ) { - wxClassInfo* classInfo = (wxClassInfo *)node->GetData(); + const wxClassInfo* classInfo = **it; if ( classInfo->IsKindOf(CLASSINFO(wxMediaBackend)) && classInfo != CLASSINFO(wxMediaBackend) ) { + ++(*it); return classInfo; } - node = wxClassInfo::sm_classTable->Next(); } // @@ -413,21 +412,21 @@ wxSize wxMediaCtrl::DoGetBestSize() const return wxSize(0,0); } -double wxMediaCtrl::GetVolume() +double wxMediaCtrl::GetVolume() { if(m_imp && m_bLoaded) return m_imp->GetVolume(); return 0.0; } -bool wxMediaCtrl::SetVolume(double dVolume) +bool wxMediaCtrl::SetVolume(double dVolume) { if(m_imp && m_bLoaded) return m_imp->SetVolume(dVolume); return false; } -bool wxMediaCtrl::ShowPlayerControls(wxMediaCtrlPlayerControls flags) +bool wxMediaCtrl::ShowPlayerControls(wxMediaCtrlPlayerControls flags) { if(m_imp) return m_imp->ShowPlayerControls(flags); @@ -464,6 +463,19 @@ void wxMediaCtrl::DoMoveWindow(int x, int y, int w, int h) m_imp->Move(x, y, w, h); } +//--------------------------------------------------------------------------- +// wxMediaCtrl::MacVisibilityChanged +//--------------------------------------------------------------------------- +#ifdef __WXOSX_CARBON__ +void wxMediaCtrl::MacVisibilityChanged() +{ + wxControl::MacVisibilityChanged(); + + if(m_imp) + m_imp->MacVisibilityChanged(); +} +#endif + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // wxMediaBackendCommonBase @@ -498,21 +510,45 @@ bool wxMediaBackendCommonBase::SendStopEvent() { wxMediaEvent theEvent(wxEVT_MEDIA_STOP, m_ctrl->GetId()); - return !m_ctrl->ProcessEvent(theEvent) || theEvent.IsAllowed(); + return !m_ctrl->GetEventHandler()->ProcessEvent(theEvent) || theEvent.IsAllowed(); } void wxMediaBackendCommonBase::QueueEvent(wxEventType evtType) { wxMediaEvent theEvent(evtType, m_ctrl->GetId()); - m_ctrl->AddPendingEvent(theEvent); + m_ctrl->GetEventHandler()->AddPendingEvent(theEvent); } -#include "wx/html/forcelnk.h" -FORCE_LINK(basewxmediabackends); +void wxMediaBackendCommonBase::QueuePlayEvent() +{ + QueueEvent(wxEVT_MEDIA_STATECHANGED); + QueueEvent(wxEVT_MEDIA_PLAY); +} -//--------------------------------------------------------------------------- -// End of compilation guard and of file -//--------------------------------------------------------------------------- -#endif //wxUSE_MEDIACTRL +void wxMediaBackendCommonBase::QueuePauseEvent() +{ + QueueEvent(wxEVT_MEDIA_STATECHANGED); + QueueEvent(wxEVT_MEDIA_PAUSE); +} +void wxMediaBackendCommonBase::QueueStopEvent() +{ + QueueEvent(wxEVT_MEDIA_STATECHANGED); + QueueEvent(wxEVT_MEDIA_STOP); +} + + +// +// Force link default backends in - +// see http://wiki.wxwidgets.org/wiki.pl?RTTI +// +#include "wx/html/forcelnk.h" +#ifdef __WXMSW__ // MSW has huge backends so we do it seperately +FORCE_LINK(wxmediabackend_am) +FORCE_LINK(wxmediabackend_wmp10) +#elif !defined(__WXOSX_COCOA__) +FORCE_LINK(basewxmediabackends) +#endif + +#endif //wxUSE_MEDIACTRL