]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/mediactrl.cpp
don't keep dangling m_prevRadio pointer (2nd part of patch 1836644)
[wxWidgets.git] / src / msw / mediactrl.cpp
index 4931215a5f1c8d57443aff88ebcc481705c7c50f..5c09a281ae2dc7d38308b39484f670fa9daadbdd 100644 (file)
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+    #pragma hdrstop
 #endif
 
-//---------------------------------------------------------------------------
-// MediaCtrl include
-//---------------------------------------------------------------------------
+#if wxUSE_MEDIACTRL
+
 #include "wx/mediactrl.h"
 
-//---------------------------------------------------------------------------
-// Compilation guard
-//---------------------------------------------------------------------------
-#if wxUSE_MEDIACTRL
+#ifndef WX_PRECOMP
+    #include "wx/log.h"
+    #include "wx/dcclient.h"
+    #include "wx/timer.h"
+    #include "wx/math.h"        // log10 & pow
+#endif
 
-//---------------------------------------------------------------------------
-// WX Includes
-//---------------------------------------------------------------------------
-#include "wx/log.h"         // wxLogDebug
-#include "wx/math.h"        // log10 & pow
 #include "wx/msw/private.h" // user info and wndproc setting/getting
-#include "wx/dcclient.h"
-#include "wx/timer.h"
 #include "wx/dynlib.h"
 
 //---------------------------------------------------------------------------
@@ -1513,7 +1507,7 @@ class WXDLLIMPEXP_MEDIA wxMCIMediaBackend : public wxMediaBackendCommonBase
 {
 public:
     wxMCIMediaBackend();
-    ~wxMCIMediaBackend();
+    virtual ~wxMCIMediaBackend();
 
     virtual bool CreateControl(wxControl* ctrl, wxWindow* parent,
                                      wxWindowID id,
@@ -1671,22 +1665,6 @@ enum
 //---------------------------------------------------------------------------
 //  QT Library
 //---------------------------------------------------------------------------
-#define wxDL_METHOD_DEFINE( rettype, name, args, shortargs, defret ) \
-    typedef rettype (* name ## Type) args ; \
-    name ## Type pfn_ ## name; \
-    rettype name args \
-    { if (m_ok) return pfn_ ## name shortargs ; return defret; }
-
-#define wxDL_VOIDMETHOD_DEFINE( name, args, shortargs ) \
-    typedef void (* name ## Type) args ; \
-    name ## Type pfn_ ## name; \
-    void name args \
-    { if (m_ok) pfn_ ## name shortargs ; }
-
-#define wxDL_METHOD_LOAD( lib, name, success ) \
-    pfn_ ## name = (name ## Type) lib.GetSymbol( wxT(#name), &success ); \
-    if (!success) { wxLog::EnableLogging(bWasLoggingEnabled); return false; }
-
 
 class WXDLLIMPEXP_MEDIA wxQuickTimeLibrary
 {
@@ -1797,84 +1775,78 @@ public:
 
 bool wxQuickTimeLibrary::Initialize()
 {
-    m_ok = false;
-
-    // Turn off the wxDynamicLibrary logging
-    bool bWasLoggingEnabled = wxLog::EnableLogging(false);
+    // Turn off the wxDynamicLibrary logging as we're prepared to handle the
+    // errors
+    wxLogNull nolog;
 
-    if (!m_dll.Load(wxT("qtmlClient.dll")))
-    {
-        wxLog::EnableLogging(bWasLoggingEnabled);
+    m_ok = m_dll.Load(wxT("qtmlClient.dll"));
+    if ( !m_ok )
         return false;
-    }
-
-    wxDL_METHOD_LOAD( m_dll, StartMovie, m_ok );
-    wxDL_METHOD_LOAD( m_dll, StopMovie, m_ok );
-    wxDL_METHOD_LOAD( m_dll, IsMovieDone, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GoToBeginningOfMovie, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMoviesError, m_ok );
-    wxDL_METHOD_LOAD( m_dll, EnterMovies, m_ok );
-    wxDL_METHOD_LOAD( m_dll, ExitMovies, m_ok );
-    wxDL_METHOD_LOAD( m_dll, InitializeQTML, m_ok );
-    wxDL_METHOD_LOAD( m_dll, TerminateQTML, m_ok );
-    wxDL_METHOD_LOAD( m_dll, NativePathNameToFSSpec, m_ok );
-    wxDL_METHOD_LOAD( m_dll, OpenMovieFile, m_ok );
-    wxDL_METHOD_LOAD( m_dll, CloseMovieFile, m_ok );
-    wxDL_METHOD_LOAD( m_dll, NewMovieFromFile, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMovieRate, m_ok );
-    wxDL_METHOD_LOAD( m_dll, SetMovieRate, m_ok );
-    wxDL_METHOD_LOAD( m_dll, MoviesTask, m_ok );
-    wxDL_METHOD_LOAD( m_dll, BlockMove, m_ok );
-    wxDL_METHOD_LOAD( m_dll, NewHandleClear, m_ok );
-    wxDL_METHOD_LOAD( m_dll, NewMovieFromDataRef, m_ok );
-    wxDL_METHOD_LOAD( m_dll, DisposeHandle, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMovieNaturalBoundsRect, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMovieIndTrackType, m_ok );
-    wxDL_METHOD_LOAD( m_dll, CreatePortAssociation, m_ok );
-    wxDL_METHOD_LOAD( m_dll, DestroyPortAssociation, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetNativeWindowPort, m_ok );
-    wxDL_METHOD_LOAD( m_dll, SetMovieGWorld, m_ok );
-    wxDL_METHOD_LOAD( m_dll, DisposeMovie, m_ok );
-    wxDL_METHOD_LOAD( m_dll, SetMovieBox, m_ok );
-    wxDL_METHOD_LOAD( m_dll, SetMovieTimeScale, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMovieDuration, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMovieTimeBase, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMovieTimeScale, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMovieTime, m_ok );
-    wxDL_METHOD_LOAD( m_dll, SetMovieTime, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMovieVolume, m_ok );
-    wxDL_METHOD_LOAD( m_dll, SetMovieVolume, m_ok );
-    wxDL_METHOD_LOAD( m_dll, SetMovieTimeValue, m_ok );
-    wxDL_METHOD_LOAD( m_dll, NewMovieController, m_ok );
-    wxDL_METHOD_LOAD( m_dll, DisposeMovieController, m_ok );
-    wxDL_METHOD_LOAD( m_dll, MCSetVisible, m_ok );
-    wxDL_METHOD_LOAD( m_dll, PrePrerollMovie, m_ok );
-    wxDL_METHOD_LOAD( m_dll, PrerollMovie, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMoviePreferredRate, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMovieLoadState, m_ok );
-    wxDL_METHOD_LOAD( m_dll, MCDoAction, m_ok );
-    wxDL_METHOD_LOAD( m_dll, MCSetControllerBoundsRect, m_ok );
-    wxDL_METHOD_LOAD( m_dll, NativeEventToMacEvent, m_ok );
-    wxDL_METHOD_LOAD( m_dll, MCIsPlayerEvent, m_ok );
-    wxDL_METHOD_LOAD( m_dll, MCSetMovie, m_ok );
-    wxDL_METHOD_LOAD( m_dll, MCSetActionFilterWithRefCon, m_ok );
-    wxDL_METHOD_LOAD( m_dll, MCGetControllerInfo, m_ok );
-    wxDL_METHOD_LOAD( m_dll, BeginUpdate, m_ok );
-    wxDL_METHOD_LOAD( m_dll, UpdateMovie, m_ok );
-    wxDL_METHOD_LOAD( m_dll, EndUpdate, m_ok );
-    wxDL_METHOD_LOAD( m_dll, GetMoviesStickyError, m_ok );
-
-    wxLog::EnableLogging(bWasLoggingEnabled);
-    m_ok = true;
 
-    return true;
+    wxDL_METHOD_LOAD( m_dll, StartMovie );
+    wxDL_METHOD_LOAD( m_dll, StopMovie );
+    wxDL_METHOD_LOAD( m_dll, IsMovieDone );
+    wxDL_METHOD_LOAD( m_dll, GoToBeginningOfMovie );
+    wxDL_METHOD_LOAD( m_dll, GetMoviesError );
+    wxDL_METHOD_LOAD( m_dll, EnterMovies );
+    wxDL_METHOD_LOAD( m_dll, ExitMovies );
+    wxDL_METHOD_LOAD( m_dll, InitializeQTML );
+    wxDL_METHOD_LOAD( m_dll, TerminateQTML );
+    wxDL_METHOD_LOAD( m_dll, NativePathNameToFSSpec );
+    wxDL_METHOD_LOAD( m_dll, OpenMovieFile );
+    wxDL_METHOD_LOAD( m_dll, CloseMovieFile );
+    wxDL_METHOD_LOAD( m_dll, NewMovieFromFile );
+    wxDL_METHOD_LOAD( m_dll, GetMovieRate );
+    wxDL_METHOD_LOAD( m_dll, SetMovieRate );
+    wxDL_METHOD_LOAD( m_dll, MoviesTask );
+    wxDL_METHOD_LOAD( m_dll, BlockMove );
+    wxDL_METHOD_LOAD( m_dll, NewHandleClear );
+    wxDL_METHOD_LOAD( m_dll, NewMovieFromDataRef );
+    wxDL_METHOD_LOAD( m_dll, DisposeHandle );
+    wxDL_METHOD_LOAD( m_dll, GetMovieNaturalBoundsRect );
+    wxDL_METHOD_LOAD( m_dll, GetMovieIndTrackType );
+    wxDL_METHOD_LOAD( m_dll, CreatePortAssociation );
+    wxDL_METHOD_LOAD( m_dll, DestroyPortAssociation );
+    wxDL_METHOD_LOAD( m_dll, GetNativeWindowPort );
+    wxDL_METHOD_LOAD( m_dll, SetMovieGWorld );
+    wxDL_METHOD_LOAD( m_dll, DisposeMovie );
+    wxDL_METHOD_LOAD( m_dll, SetMovieBox );
+    wxDL_METHOD_LOAD( m_dll, SetMovieTimeScale );
+    wxDL_METHOD_LOAD( m_dll, GetMovieDuration );
+    wxDL_METHOD_LOAD( m_dll, GetMovieTimeBase );
+    wxDL_METHOD_LOAD( m_dll, GetMovieTimeScale );
+    wxDL_METHOD_LOAD( m_dll, GetMovieTime );
+    wxDL_METHOD_LOAD( m_dll, SetMovieTime );
+    wxDL_METHOD_LOAD( m_dll, GetMovieVolume );
+    wxDL_METHOD_LOAD( m_dll, SetMovieVolume );
+    wxDL_METHOD_LOAD( m_dll, SetMovieTimeValue );
+    wxDL_METHOD_LOAD( m_dll, NewMovieController );
+    wxDL_METHOD_LOAD( m_dll, DisposeMovieController );
+    wxDL_METHOD_LOAD( m_dll, MCSetVisible );
+    wxDL_METHOD_LOAD( m_dll, PrePrerollMovie );
+    wxDL_METHOD_LOAD( m_dll, PrerollMovie );
+    wxDL_METHOD_LOAD( m_dll, GetMoviePreferredRate );
+    wxDL_METHOD_LOAD( m_dll, GetMovieLoadState );
+    wxDL_METHOD_LOAD( m_dll, MCDoAction );
+    wxDL_METHOD_LOAD( m_dll, MCSetControllerBoundsRect );
+    wxDL_METHOD_LOAD( m_dll, NativeEventToMacEvent );
+    wxDL_METHOD_LOAD( m_dll, MCIsPlayerEvent );
+    wxDL_METHOD_LOAD( m_dll, MCSetMovie );
+    wxDL_METHOD_LOAD( m_dll, MCSetActionFilterWithRefCon );
+    wxDL_METHOD_LOAD( m_dll, MCGetControllerInfo );
+    wxDL_METHOD_LOAD( m_dll, BeginUpdate );
+    wxDL_METHOD_LOAD( m_dll, UpdateMovie );
+    wxDL_METHOD_LOAD( m_dll, EndUpdate );
+    wxDL_METHOD_LOAD( m_dll, GetMoviesStickyError );
+
+    return m_ok;
 }
 
 class WXDLLIMPEXP_MEDIA wxQTMediaBackend : public wxMediaBackendCommonBase
 {
 public:
     wxQTMediaBackend();
-    ~wxQTMediaBackend();
+    virtual ~wxQTMediaBackend();
 
     virtual bool CreateControl(wxControl* ctrl, wxWindow* parent,
                                      wxWindowID id,
@@ -1986,14 +1958,14 @@ wxString wxAMMediaBackend::GetErrorString(HRESULT hrdsv)
     {
         return wxString::Format(wxT("DirectShow error \"%s\" \n")
                                      wxT("(numeric %X)\n")
-                                     wxT("occured"),
+                                     wxT("occurred"),
                                      szError, (int)hrdsv);
     }
     else
     {
         return wxString::Format(wxT("Unknown error \n")
                                      wxT("(numeric %X)\n")
-                                     wxT("occured"),
+                                     wxT("occurred"),
                                      (int)hrdsv);
     }
 }
@@ -2002,7 +1974,6 @@ wxString wxAMMediaBackend::GetErrorString(HRESULT hrdsv)
 #define wxVERIFY(x) wxASSERT((x))
 #define wxAMLOG(x) wxLogDebug(GetErrorString(x))
 #else
-#define wxAMVERIFY(x) (x)
 #define wxVERIFY(x) (x)
 #define wxAMLOG(x)
 #define wxAMFAIL(x)
@@ -2141,7 +2112,7 @@ public:
         pGB->Release();
     }
 
-    ~wxAMPlayTimer()
+    virtual ~wxAMPlayTimer()
     {
         SAFE_RELEASE(m_pME);
     }
@@ -2957,7 +2928,7 @@ bool wxMCIMediaBackend::Load(const wxString& fileName)
     // omit this it tells MCI to select the device instead. This is good
     // because we have no reliable way of "enumerating" the devices in MCI
     MCI_OPEN_PARMS openParms;
-    openParms.lpstrElementName = (wxChar*) fileName.c_str();
+    openParms.lpstrElementName = fileName.wx_str();
 
     if (mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT,
                         (DWORD)(LPVOID)&openParms) != 0)
@@ -3347,9 +3318,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxQTMediaBackend, wxMediaBackend)
 // team I believe
 #define MOVIE_DELAY 20
 
-#include "wx/timer.h"
-
-
 //---------------------------------------------------------------------------
 // wxQTLoadTimer
 //
@@ -4180,7 +4148,4 @@ void wxQTMediaEvtHandler::OnEraseBackground(wxEraseEvent& evt)
 #include "wx/html/forcelnk.h"
 FORCE_LINK_ME(basewxmediabackends)
 
-//---------------------------------------------------------------------------
-//  End wxMediaCtrl Compilation Guard and this file
-//---------------------------------------------------------------------------
 #endif //wxUSE_MEDIACTRL