//===========================================================================
//
// Implementation
-//
+//
//===========================================================================
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Searches for a backend that is installed on the system (backends
// starting with lower characters in the alphabet are given priority),
// and creates the control from it
-//
+//
// This searches by searching the global RTTI hashtable, class by class,
// attempting to call CreateControl on each one found that is a derivative
-// of wxMediaBackend - if it succeededs Create returns true, otherwise
+// of wxMediaBackend - if it succeeded Create returns true, otherwise
// it keeps iterating through the hashmap.
//---------------------------------------------------------------------------
bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id,
const wxString& fileName,
- const wxPoint& pos,
+ const wxPoint& pos,
const wxSize& size,
- long style,
+ long style,
const wxString& szBackend,
const wxValidator& validator,
const wxString& name)
if (!fileName.empty())
{
- if (!m_imp->Load(fileName))
+ if (!Load(fileName))
{
delete m_imp;
m_imp = NULL;
}
}
+ SetBestFittingSize(size);
return true;
}
else
{
if(!DoCreate(classInfo, parent, id,
pos, size, style, validator, name))
- continue;
+ continue;
if (!fileName.empty())
{
- if (m_imp->Load(fileName))
+ if (Load(fileName))
+ {
+ SetBestFittingSize(size);
return true;
+ }
else
delete m_imp;
}
else
+ {
+ SetBestFittingSize(size);
return true;
+ }
classInfo = NextBackend();
}
bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id,
const wxURI& location,
- const wxPoint& pos,
+ const wxPoint& pos,
const wxSize& size,
- long style,
+ long style,
const wxString& szBackend,
const wxValidator& validator,
const wxString& name)
return false;
}
- if (!m_imp->Load(location))
+ if (!Load(location))
{
delete m_imp;
m_imp = NULL;
return false;
}
+ SetBestFittingSize(size);
return true;
}
else
{
if(!DoCreate(classInfo, parent, id,
pos, size, style, validator, name))
- continue;
+ continue;
- if (m_imp->Load(location))
+ if (Load(location))
+ {
+ SetBestFittingSize(size);
return true;
+ }
else
delete m_imp;
//---------------------------------------------------------------------------
bool wxMediaCtrl::DoCreate(wxClassInfo* classInfo,
wxWindow* parent, wxWindowID id,
- const wxPoint& pos,
+ const wxPoint& pos,
const wxSize& size,
- long style,
+ long style,
const wxValidator& validator,
const wxString& name)
{
m_imp = (wxMediaBackend*)classInfo->CreateObject();
-
+
if( m_imp->CreateControl(this, parent, id, pos, size,
style, validator, name) )
{
- this->Connect(GetId(), wxEVT_MEDIA_FINISHED,
- (wxObjectEventFunction) (wxEventFunction)
- (wxMediaEventFunction)
- &wxMediaCtrl::OnMediaFinished);
return true;
}
-
+
delete m_imp;
return false;
}
// Search through the RTTI hashmap one at a
// time, attempting to create each derivative
// of wxMediaBackend
-//
+//
//
// STL isn't compatable with and will have a compilation error
// on a wxNode, however, wxHashTable::compatibility_iterator is
// wxMediaCtrl::Stop
// wxMediaCtrl::GetPlaybackRate
// wxMediaCtrl::SetPlaybackRate
-// wxMediaCtrl::SetPosition
-// wxMediaCtrl::GetPosition
-// wxMediaCtrl::GetDuration
+// wxMediaCtrl::Seek --> SetPosition
+// wxMediaCtrl::Tell --> GetPosition
+// wxMediaCtrl::Length --> GetDuration
// wxMediaCtrl::GetState
// wxMediaCtrl::DoGetBestSize
-//
+//
// 1) Check to see whether the backend exists and is loading
// 2) Call the backend's version of the method, returning success
// if the backend's version succeeds
return false;
}
-bool wxMediaCtrl::SetPosition(wxLongLong where)
+wxFileOffset wxMediaCtrl::Seek(wxFileOffset where, wxSeekMode mode)
{
- if(m_imp && m_bLoaded)
- return m_imp->SetPosition(where);
- return false;
+ wxFileOffset offset;
+
+ switch (mode)
+ {
+ case wxFromStart:
+ offset = where;
+ break;
+ case wxFromEnd:
+ offset = Length() - where;
+ break;
+// case wxFromCurrent:
+ default:
+ offset = Tell() + where;
+ break;
+ }
+
+ if(m_imp && m_bLoaded && m_imp->SetPosition(offset))
+ return offset;
+ return wxInvalidOffset;
}
-wxLongLong wxMediaCtrl::GetPosition()
+wxFileOffset wxMediaCtrl::Tell()
{
+ //FIXME
if(m_imp && m_bLoaded)
- return m_imp->GetPosition();
- return 0;
+ return (wxFileOffset) m_imp->GetPosition().ToLong();
+ return wxInvalidOffset;
}
-wxLongLong wxMediaCtrl::GetDuration()
+wxFileOffset wxMediaCtrl::Length()
{
+ //FIXME
if(m_imp && m_bLoaded)
- return m_imp->GetDuration();
- return 0;
+ return (wxFileOffset) m_imp->GetDuration().ToLong();
+ return wxInvalidOffset;
}
wxMediaState wxMediaCtrl::GetState()
//---------------------------------------------------------------------------
// wxMediaCtrl::DoMoveWindow
-//
+//
// 1) Call parent's version so that our control's window moves where
// it's supposed to
// 2) If the backend exists and is loaded, move the video
m_imp->Move(x, y, w, h);
}
-void wxMediaCtrl::Loop(bool bLoop)
-{
- m_bLoop = bLoop;
-}
-
-bool wxMediaCtrl::IsLooped()
-{
- return m_bLoop;
-}
-
-void wxMediaCtrl::OnMediaFinished(const wxMediaEvent& WXUNUSED(evt))
-{
- if(m_bLoop)
- {
-#ifdef __WXDEBUG__
- wxASSERT( Play() );
-#else
- Play();
-#endif
- }
-}
-
//DARWIN gcc compiler badly screwed up - needs destructor impl in source
wxMediaBackend::~wxMediaBackend()
{ }
-#include <wx/html/forcelnk.h>
+#include "wx/html/forcelnk.h"
FORCE_LINK(basewxmediabackends);
//---------------------------------------------------------------------------