no longer needed.
authorwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 11 Sep 2012 19:51:11 +0000 (19:51 +0000)
committerwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 11 Sep 2012 19:51:11 +0000 (19:51 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@674 01035d8c-6547-0410-b346-abe4f91aad63

fdmdv2/src/audiostream.h [deleted file]
fdmdv2/src/fdmdv2DlgAudio.cpp [deleted file]
fdmdv2/src/fdmdv2DlgAudio.h [deleted file]
fdmdv2/src/fdmdv2TopFrame.cpp [deleted file]
fdmdv2/src/fdmdv2TopFrame.h [deleted file]
fdmdv2/src/fdmdv2_thread_audio.h [deleted file]
fdmdv2/src/files.txt [deleted file]
fdmdv2/src/thread_audio.cpp [deleted file]
fdmdv2/src/thread_audio.h [deleted file]

diff --git a/fdmdv2/src/audiostream.h b/fdmdv2/src/audiostream.h
deleted file mode 100644 (file)
index f3562de..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-//============================================================
-// AudioStream.h
-//
-//
-//============================================================
-#include <cmath>
-#include <cassert>
-#include <cstddef>
-#include "portaudiocpp/PortAudioCpp.hxx"
-#include <wx/wx.h>\r
-#include <wx/thread.h>
-#include "libsndfile/include/sndfile.h"\r
-#include "extern/include/portaudio.h"
-#include "extern/include/portaudiocpp/PortAudioCpp.hxx"
-
-#ifndef __AudioStream__
-#define __AudioStream__
-
-const int NUM_SECONDS = 5;
-const double SAMPLE_RATE = 44100.0;
-const int FRAMES_PER_BUFFER = 64;
-const int TABLE_SIZE = 200;
-
-class AudioStream
-{
-public:
-//    AudioStream(int tableSize) : tableSize_(tableSize), leftPhase_(0), rightPhase_(0);
-    AudioStream(int tableSize);
-    ~AudioStream();
-
-    int generate(const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags);
-
-private:
-    float *table_;
-    int tableSize_;
-    int leftPhase_;
-    int rightPhase_;
-
-    void Open();
-
-protected:
-
-private:
-};\r
-
-#endif // __AudioStream__
diff --git a/fdmdv2/src/fdmdv2DlgAudio.cpp b/fdmdv2/src/fdmdv2DlgAudio.cpp
deleted file mode 100644 (file)
index 5e7f123..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "fdmdv2DlgAudio.h"\r
-\r
-fdmdv2DlgAudio::fdmdv2DlgAudio( wxWindow* parent )\r
-:\r
-DlgAudio( parent )\r
-{\r
-\r
-}\r
-\r
-void fdmdv2DlgAudio::OnApply( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnApply\r
-}\r
-\r
-void fdmdv2DlgAudio::OnCancel( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnCancel\r
-}\r
-\r
-void fdmdv2DlgAudio::OnOK( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnOK\r
-}\r
diff --git a/fdmdv2/src/fdmdv2DlgAudio.h b/fdmdv2/src/fdmdv2DlgAudio.h
deleted file mode 100644 (file)
index 196d3f8..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef __fdmdv2DlgAudio__\r
-#define __fdmdv2DlgAudio__\r
-\r
-/**\r
-@file\r
-Subclass of DlgAudio, which is generated by wxFormBuilder.\r
-*/\r
-\r
-#include "topFrame.h"\r
-\r
-//// end generated include\r
-\r
-/** Implementing DlgAudio */\r
-class fdmdv2DlgAudio : public DlgAudio\r
-{\r
-       protected:\r
-               // Handlers for DlgAudio events.\r
-               void OnApply( wxCommandEvent& event );\r
-               void OnCancel( wxCommandEvent& event );\r
-               void OnOK( wxCommandEvent& event );\r
-       public:\r
-               /** Constructor */\r
-               fdmdv2DlgAudio( wxWindow* parent );\r
-       //// end generated class members\r
-       \r
-};\r
-\r
-#endif // __fdmdv2DlgAudio__\r
diff --git a/fdmdv2/src/fdmdv2TopFrame.cpp b/fdmdv2/src/fdmdv2TopFrame.cpp
deleted file mode 100644 (file)
index 7b3ef07..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-#include "fdmdv2TopFrame.h"\r
-\r
-fdmdv2TopFrame::fdmdv2TopFrame( wxWindow* parent )\r
-:\r
-TopFrame( parent )\r
-{\r
-\r
-}\r
-\r
-void fdmdv2TopFrame::topFrame_OnClose( wxCloseEvent& event )\r
-{\r
-// TODO: Implement topFrame_OnClose\r
-}\r
-\r
-void fdmdv2TopFrame::topFrame_OnPaint( wxPaintEvent& event )\r
-{\r
-// TODO: Implement topFrame_OnPaint\r
-}\r
-\r
-void fdmdv2TopFrame::topFrame_OnSize( wxSizeEvent& event )\r
-{\r
-// TODO: Implement topFrame_OnSize\r
-}\r
-\r
-void fdmdv2TopFrame::topFrame_OnUpdateUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement topFrame_OnUpdateUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnOpen( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnOpen\r
-}\r
-\r
-void fdmdv2TopFrame::OnOpenUpdateUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnOpenUpdateUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnSave( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnSave\r
-}\r
-\r
-void fdmdv2TopFrame::OnSaveUpdateUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnSaveUpdateUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnClose( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnClose\r
-}\r
-\r
-void fdmdv2TopFrame::OnCloseUpdateUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnCloseUpdateUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnExit( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnExit\r
-}\r
-\r
-void fdmdv2TopFrame::OnCopy( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnCopy\r
-}\r
-\r
-void fdmdv2TopFrame::OnCopyUpdateUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnCopyUpdateUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnCut( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnCut\r
-}\r
-\r
-void fdmdv2TopFrame::OnCutUpdateUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnCutUpdateUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnPaste( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnPaste\r
-}\r
-\r
-void fdmdv2TopFrame::OnPasteUpdateUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnPasteUpdateUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnToolsAudio( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnToolsAudio\r
-}\r
-\r
-void fdmdv2TopFrame::OnToolsAudioUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnToolsAudioUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnToolsComCfg( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnToolsComCfg\r
-}\r
-\r
-void fdmdv2TopFrame::OnToolsComCfgUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnToolsComCfgUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnToolsOptions( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnToolsOptions\r
-}\r
-\r
-void fdmdv2TopFrame::OnToolsOptionsUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnToolsOptionsUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnHelpCheckUpdates( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnHelpCheckUpdates\r
-}\r
-\r
-void fdmdv2TopFrame::OnHelpCheckUpdatesUI( wxUpdateUIEvent& event )\r
-{\r
-// TODO: Implement OnHelpCheckUpdatesUI\r
-}\r
-\r
-void fdmdv2TopFrame::OnHelpAbout( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnHelpAbout\r
-}\r
-\r
-void fdmdv2TopFrame::OnTogBtnRxID( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnTogBtnRxID\r
-}\r
-\r
-void fdmdv2TopFrame::OnTogBtnTxID( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnTogBtnTxID\r
-}\r
-\r
-void fdmdv2TopFrame::OnCmdSliderScroll( wxScrollEvent& event )\r
-{\r
-// TODO: Implement OnCmdSliderScroll\r
-}\r
-\r
-void fdmdv2TopFrame::OnSliderScrollBottom( wxScrollEvent& event )\r
-{\r
-// TODO: Implement OnSliderScrollBottom\r
-}\r
-\r
-void fdmdv2TopFrame::OnCmdSliderScrollChanged( wxScrollEvent& event )\r
-{\r
-// TODO: Implement OnCmdSliderScrollChanged\r
-}\r
-\r
-void fdmdv2TopFrame::OnSliderScrollTop( wxScrollEvent& event )\r
-{\r
-// TODO: Implement OnSliderScrollTop\r
-}\r
-\r
-void fdmdv2TopFrame::OnCheckSQClick( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnCheckSQClick\r
-}\r
-\r
-void fdmdv2TopFrame::OnTogBtnSplitClick( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnTogBtnSplitClick\r
-}\r
-\r
-void fdmdv2TopFrame::OnTogBtnAnalogClick( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnTogBtnAnalogClick\r
-}\r
-\r
-void fdmdv2TopFrame::OnTogBtnALCClick( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnTogBtnALCClick\r
-}\r
-\r
-void fdmdv2TopFrame::OnTogBtnTXClick( wxCommandEvent& event )\r
-{\r
-// TODO: Implement OnTogBtnTXClick\r
-}\r
diff --git a/fdmdv2/src/fdmdv2TopFrame.h b/fdmdv2/src/fdmdv2TopFrame.h
deleted file mode 100644 (file)
index fca7fe6..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef __fdmdv2TopFrame__\r
-#define __fdmdv2TopFrame__\r
-\r
-/**\r
-@file\r
-Subclass of TopFrame, which is generated by wxFormBuilder.\r
-*/\r
-\r
-#include "topFrame.h"\r
-\r
-//// end generated include\r
-\r
-/** Implementing TopFrame */\r
-class fdmdv2TopFrame : public TopFrame\r
-{\r
-       protected:\r
-               // Handlers for TopFrame events.\r
-               void topFrame_OnClose( wxCloseEvent& event );\r
-               void topFrame_OnPaint( wxPaintEvent& event );\r
-               void topFrame_OnSize( wxSizeEvent& event );\r
-               void topFrame_OnUpdateUI( wxUpdateUIEvent& event );\r
-               void OnOpen( wxCommandEvent& event );\r
-               void OnOpenUpdateUI( wxUpdateUIEvent& event );\r
-               void OnSave( wxCommandEvent& event );\r
-               void OnSaveUpdateUI( wxUpdateUIEvent& event );\r
-               void OnClose( wxCommandEvent& event );\r
-               void OnCloseUpdateUI( wxUpdateUIEvent& event );\r
-               void OnExit( wxCommandEvent& event );\r
-               void OnCopy( wxCommandEvent& event );\r
-               void OnCopyUpdateUI( wxUpdateUIEvent& event );\r
-               void OnCut( wxCommandEvent& event );\r
-               void OnCutUpdateUI( wxUpdateUIEvent& event );\r
-               void OnPaste( wxCommandEvent& event );\r
-               void OnPasteUpdateUI( wxUpdateUIEvent& event );\r
-               void OnToolsAudio( wxCommandEvent& event );\r
-               void OnToolsAudioUI( wxUpdateUIEvent& event );\r
-               void OnToolsComCfg( wxCommandEvent& event );\r
-               void OnToolsComCfgUI( wxUpdateUIEvent& event );\r
-               void OnToolsOptions( wxCommandEvent& event );\r
-               void OnToolsOptionsUI( wxUpdateUIEvent& event );\r
-               void OnHelpCheckUpdates( wxCommandEvent& event );\r
-               void OnHelpCheckUpdatesUI( wxUpdateUIEvent& event );\r
-               void OnHelpAbout( wxCommandEvent& event );\r
-               void OnTogBtnRxID( wxCommandEvent& event );\r
-               void OnTogBtnTxID( wxCommandEvent& event );\r
-               void OnCmdSliderScroll( wxScrollEvent& event );\r
-               void OnSliderScrollBottom( wxScrollEvent& event );\r
-               void OnCmdSliderScrollChanged( wxScrollEvent& event );\r
-               void OnSliderScrollTop( wxScrollEvent& event );\r
-               void OnCheckSQClick( wxCommandEvent& event );\r
-               void OnTogBtnSplitClick( wxCommandEvent& event );\r
-               void OnTogBtnAnalogClick( wxCommandEvent& event );\r
-               void OnTogBtnALCClick( wxCommandEvent& event );\r
-               void OnTogBtnTXClick( wxCommandEvent& event );\r
-       public:\r
-               /** Constructor */\r
-               fdmdv2TopFrame( wxWindow* parent );\r
-       //// end generated class members\r
-       \r
-};\r
-\r
-#endif // __fdmdv2TopFrame__\r
diff --git a/fdmdv2/src/fdmdv2_thread_audio.h b/fdmdv2/src/fdmdv2_thread_audio.h
deleted file mode 100644 (file)
index d96221f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef __THREAD_AUDIO__
-#define __THREAD_AUDIO__
-#include "wx/thread.h"     // Base class: wxThread
-
-//namespace NSfdmdv2Audio
-//{
-    class Fdmdv2ThreadAudio : public wxThread
-    {
-        public:
-            Fdmdv2ThreadAudio();
-            ~Fdmdv2ThreadAudio();
-        public:
-            virtual void* Entry();
-            virtual void OnDelete();
-            virtual void OnExit();
-            virtual void OnKill();
-            virtual bool TestDestroy();
-    };
-//}
-#endif // __THREAD_AUDIO__
diff --git a/fdmdv2/src/files.txt b/fdmdv2/src/files.txt
deleted file mode 100644 (file)
index 378a6fc..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-audiostream.cpp : audiostream.h
-dlg_about.cpp : dlg_about.h
-dlg_audio.cpp : dlg_audio.h
-dlg_comports.cpp : dlg_comports.h
-dlg_options.cpp : dlg_options.h
-fdmdv2DlgAudio.cpp : fdmdv2DlgAudio.h
-fdmdv2TopFrame.cpp : fdmdv2TopFrame.h
-fdmdv2_main.cpp : fdmdv2_main.h
-fdmdv2_plot.cpp : fdmdv2_plot.h
-fdmdv2_thread_audio.h
-paclass.cpp : paclass.h
-thread_audio.cpp : thread_audio.h
-topFrame.cpp : topFrame.h
-
-#topFrame.py
-#topFrame.xrc
-#credits.txt
-#FDMDV2.fbp
-
-audiostream.cpp
-audiostream.h
-credits.txt
-dlg_about.cpp
-dlg_about.h
-dlg_audio.cpp
-dlg_audio.h
-dlg_comports.cpp
-dlg_comports.h
-dlg_options.cpp
-dlg_options.h
-FDMDV2.fbp
-fdmdv2DlgAudio.cpp
-fdmdv2DlgAudio.h
-fdmdv2TopFrame.cpp
-fdmdv2TopFrame.h
-fdmdv2_main.cpp
-fdmdv2_main.h
-fdmdv2_plot.cpp
-fdmdv2_plot.h
-fdmdv2_thread_audio.h
-paclass.cpp
-paclass.h
-thread_audio.cpp
-thread_audio.h
-topFrame.cpp
-topFrame.h
-topFrame.py
-topFrame.xrc
\ No newline at end of file
diff --git a/fdmdv2/src/thread_audio.cpp b/fdmdv2/src/thread_audio.cpp
deleted file mode 100644 (file)
index ff1795e..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-//==========================================================================\r
-// Name:            thread_audio.cpp\r
-//\r
-// Purpose:         Implements a thread for processing an audio data stream.\r
-// Created:         May 11, 2012
-// Initial author:  David Witten\r
-// License:         BSD License (other licenses may apply to other\r
-//                  components of this project)\r
-//==========================================================================\r
-#include "thread_audio.h"\r
-\r
-// declare a new type of event, to be used by our MyThread class:\r
-wxDECLARE_EVENT(wxEVT_COMMAND_AUDIOTHREAD_COMPLETED, wxThreadEvent);\r
-wxDECLARE_EVENT(wxEVT_COMMAND_AUDIOTHREAD_UPDATE, wxThreadEvent);\r
-\r
-#include "stdio.h"\r
-#include "extern/include/portaudio.h"\r
-\r
-/* This will be called asynchronously by the PortAudio engine. */\r
-static int audioCallback( void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, PaTime outTime, void *userData )\r
-{\r
-    float *out = (float *) outputBuffer;\r
-    float *in = (float *) inputBuffer;\r
-    float leftInput, rightInput;\r
-    unsigned int i;\r
-\r
-    if( inputBuffer == NULL )\r
-    {\r
-        return 0;\r
-    }\r
-    /* Read input buffer, process data, and fill output buffer. */\r
-    for(i = 0; i < framesPerBuffer; i++)\r
-    {\r
-        leftInput = *in++;                          /* Get interleaved samples from input buffer. */\r
-        rightInput = *in++;\r
-        *out++ = leftInput * rightInput;            /* ring modulation */\r
-        *out++ = 0.5f * (leftInput + rightInput);   /* mixing */\r
-    }\r
-    return 0;\r
-}\r
-\r
-AudioThread::AudioThread()
-{
-}
-
-AudioThread::~AudioThread()
-{
-}
-
-void* AudioThread::Entry()
-{
-    return NULL;
-}
-void AudioThread::OnDelete()
-{
-}
-void AudioThread::OnExit()
-{
-}
-void AudioThread::OnKill()
-{
-}\r
-
-//    bool Fdmdv2ThreadAudio::TestDestroy()
-//    {
-//    }
-\r
-#ifdef PORTAUDIO_MAIN\r
-/* Use a PortAudioStream to process audio data. */\r
-int main(void)\r
-{\r
-    PortAudioWrap *stream;\r
-    Pa_Initialize();\r
-    //Pa_OpenDefaultStream(&stream, 2, 2, /* stereo input and output */ paFloat32, 44100.0, 64, 0, /* 64 frames per buffer, let PA determine numBuffers */audioCallback, NULL );\r
-    Pa_OpenDefaultStream(&stream, 2, 2, paFloat32, 44100.0, 64, 0, audioCallback, NULL );\r
-    Pa_StartStream( stream );\r
-    Pa_Sleep( 10000 );                              /* Sleep for 10 seconds while processing. */\r
-    Pa_StopStream( stream );\r
-    Pa_CloseStream( stream );\r
-    Pa_Terminate();\r
-    return 0;\r
-}\r
-#endif  //PORTAUDIO_MAIN\r
diff --git a/fdmdv2/src/thread_audio.h b/fdmdv2/src/thread_audio.h
deleted file mode 100644 (file)
index 2206957..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-//==========================================================================\r
-// Name:            thread_audio.h\r
-//
-// Purpose:         Declares background thread classes to handle audio IO.
-// Created:         May 11, 2012
-// Initial author:  David Witten\r
-// License:         BSD License (other licenses may apply to other\r
-//                  components of this project)\r
-//==========================================================================\r
-#include <wx/thread.h>
-#include "fdmdv2_main.h"\r
-\r
-#ifndef __THREAD_AUDIO__
-#define __THREAD_AUDIO__
-\r
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
-// Class AudioThread\r
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
-class AudioThread: public wxThread\r
-{\r
-    public:\r
-        AudioThread(MainFrame *handler) : wxThread(wxTHREAD_DETACHED){ m_pHandler = handler; }\r
-        ~AudioThread();\r
-        void *Entry();
-        void OnDelete();
-        void OnExit();
-        void OnKill();
-        bool TestDestroy();
-\r
-    protected:\r
-        //ExitCode Entry();\r
-        MainFrame *m_pHandler;\r
-};\r
-\r
-    // declare a new type of event, to be used by our MyThread class:\r
-    wxDECLARE_EVENT(wxEVT_COMMAND_MYTHREAD_COMPLETED, wxThreadEvent);\r
-    wxDECLARE_EVENT(wxEVT_COMMAND_MYTHREAD_UPDATE, wxThreadEvent);\r
-    class MyFrame;\r
-\r
-    class MyThread : public wxThread\r
-    {\r
-    public:\r
-        MyThread(MyFrame *handler)\r
-            : wxThread(wxTHREAD_DETACHED)\r
-            { m_pHandler = handler }\r
-        ~MyThread();\r
-\r
-    protected:\r
-        virtual ExitCode Entry();\r
-        MyFrame *m_pHandler;\r
-    };\r
-\r
-    class MyFrame : public wxFrame\r
-    {\r
-    public:\r
-        ...\r
-        ~MyFrame()\r
-        {\r
-            // it's better to do any thread cleanup in the OnClose()\r
-            // event handler, rather than in the destructor.\r
-            // This is because the event loop for a top-level window is not\r
-            // active anymore when its destructor is called and if the thread\r
-            // sends events when ending, they won't be processed unless\r
-            // you ended the thread from OnClose.\r
-            // See @ref overview_windowdeletion for more info.\r
-        }\r
-        ...\r
-        void DoStartThread();\r
-        void DoPauseThread();\r
-\r
-        // a resume routine would be nearly identic to DoPauseThread()\r
-        void DoResumeThread() { ... }\r
-\r
-        void OnThreadUpdate(wxThreadEvent&);\r
-        void OnThreadCompletion(wxThreadEvent&);\r
-        void OnClose(wxCloseEvent&);\r
-\r
-    protected:\r
-        MyThread *m_pThread;\r
-        wxCriticalSection m_pThreadCS;    // protects the m_pThread pointer\r
-\r
-        wxDECLARE_EVENT_TABLE();\r
-    };\r
-\r
-    wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)\r
-        EVT_CLOSE(MyFrame::OnClose)\r
-        EVT_MENU(Minimal_Start,  MyFrame::DoStartThread)\r
-        EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_MYTHREAD_UPDATE, MyFrame::OnThreadUpdate)\r
-        EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_MYTHREAD_COMPLETED, MyFrame::OnThreadCompletion)\r
-    wxEND_EVENT_TABLE()\r
-\r
-    wxDEFINE_EVENT(wxEVT_COMMAND_MYTHREAD_COMPLETED, wxThreadEvent)\r
-    wxDEFINE_EVENT(wxEVT_COMMAND_MYTHREAD_UPDATE, wxThreadEvent)\r
-\r
-    void MyFrame::DoStartThread()\r
-    {\r
-        m_pThread = new MyThread(this);\r
-\r
-        if ( m_pThread->Create() != wxTHREAD_NO_ERROR )\r
-        {\r
-            wxLogError("Can't create the thread!");\r
-            delete m_pThread;\r
-            m_pThread = NULL;\r
-        }\r
-        else\r
-        {\r
-            if (m_pThread->Run() != wxTHREAD_NO_ERROR )\r
-            {\r
-                wxLogError("Can't create the thread!");\r
-                delete m_pThread;\r
-                m_pThread = NULL;\r
-            }\r
-\r
-            // after the call to wxThread::Run(), the m_pThread pointer is "unsafe":\r
-            // at any moment the thread may cease to exist (because it completes its work).\r
-            // To avoid dangling pointers OnThreadExit() will set m_pThread\r
-            // to NULL when the thread dies.\r
-        }\r
-    }\r
-\r
-    wxThread::ExitCode MyThread::Entry()\r
-    {\r
-        while (!TestDestroy())\r
-        {\r
-            // ... do a bit of work...\r
-\r
-            wxQueueEvent(m_pHandler, new wxThreadEvent(wxEVT_COMMAND_MYTHREAD_UPDATE));\r
-        }\r
-\r
-        // signal the event handler that this thread is going to be destroyed\r
-        // NOTE: here we assume that using the m_pHandler pointer is safe,\r
-        //       (in this case this is assured by the MyFrame destructor)\r
-        wxQueueEvent(m_pHandler, new wxThreadEvent(wxEVT_COMMAND_MYTHREAD_COMPLETED));\r
-\r
-        return (wxThread::ExitCode)0;     // success\r
-    }\r
-\r
-    MyThread::~MyThread()\r
-    {\r
-        wxCriticalSectionLocker enter(m_pHandler->m_pThreadCS);\r
-\r
-        // the thread is being destroyed; make sure not to leave dangling pointers around\r
-        m_pHandler->m_pThread = NULL;\r
-    }\r
-\r
-    void MyFrame::OnThreadCompletion(wxThreadEvent&)\r
-    {\r
-        wxMessageOutputDebug().Printf("MYFRAME: MyThread exited!\n");\r
-    }\r
-\r
-    void MyFrame::OnThreadUpdate(wxThreadEvent&)\r
-    {\r
-        wxMessageOutputDebug().Printf("MYFRAME: MyThread update...\n");\r
-    }\r
-\r
-    void MyFrame::DoPauseThread()\r
-    {\r
-        // anytime we access the m_pThread pointer we must ensure that it won't\r
-        // be modified in the meanwhile; since only a single thread may be\r
-        // inside a given critical section at a given time, the following code\r
-        // is safe:\r
-        wxCriticalSectionLocker enter(m_pThreadCS);\r
-\r
-        if (m_pThread)         // does the thread still exist?\r
-        {\r
-            // without a critical section, once reached this point it may happen\r
-            // that the OS scheduler gives control to the MyThread::Entry() function,\r
-            // which in turn may return (because it completes its work) making\r
-            // invalid the m_pThread pointer\r
-\r
-            if (m_pThread->Pause() != wxTHREAD_NO_ERROR )\r
-                wxLogError("Can't pause the thread!");\r
-        }\r
-    }\r
-\r
-    void MyFrame::OnClose(wxCloseEvent&)\r
-    {\r
-        {\r
-            wxCriticalSectionLocker enter(m_pThreadCS);\r
-\r
-            if (m_pThread)         // does the thread still exist?\r
-            {\r
-                wxMessageOutputDebug().Printf("MYFRAME: deleting thread");\r
-\r
-                if (m_pThread->Delete() != wxTHREAD_NO_ERROR )\r
-                    wxLogError("Can't delete the thread!");\r
-            }\r
-        }       // exit from the critical section to give the thread\r
-                // the possibility to enter its destructor\r
-                // (which is guarded with m_pThreadCS critical section!)\r
-\r
-        while (1)\r
-        {\r
-            { // was the ~MyThread() function executed?\r
-                wxCriticalSectionLocker enter(m_pThreadCS);\r
-                if (!m_pThread) break;\r
-            }\r
-\r
-            // wait for thread completion\r
-            wxThread::This()->Sleep(1);\r
-        }\r
-\r
-        Destroy();\r
-    }\r
-\r
-\r
-#endif // __THREAD_AUDIO__