git-svn-id: https://svn.code.sf.net/p/freetel/code@873 01035d8c-6547-0410-b346-abe4f9...
authorwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 28 Oct 2012 23:14:06 +0000 (23:14 +0000)
committerwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 28 Oct 2012 23:14:06 +0000 (23:14 +0000)
13 files changed:
fdmdv2/build/fdmdv2.workspace
fdmdv2/notes/portaudio_notes.txt
fdmdv2/src/dlg_audio.cpp
fdmdv2/src/dlg_audio.h
fdmdv2/tests/pa_enum/AudioOptsDialog.cpp [new file with mode: 0644]
fdmdv2/tests/pa_enum/AudioOptsDialog.h [new file with mode: 0644]
fdmdv2/tests/pa_enum/gui.cpp
fdmdv2/tests/pa_enum/gui.h
fdmdv2/tests/pa_enum/main.cpp
fdmdv2/tests/pa_enum/main.h
fdmdv2/tests/pa_enum/pa_enum.mk
fdmdv2/tests/pa_enum/pa_enum.project
fdmdv2/tests/pa_enum/pa_enum.txt

index 6e5a683038955db0d5e6c842079663da569dd674..ff79c6f655880afcebf5fc004ffc330a2985fec8 100644 (file)
@@ -6,16 +6,19 @@
   </Environment>
   <Project Name="rawbits" Path="../tests/image/rawbits.project" Active="No"/>
   <Project Name="pa_enum" Path="../tests/pa_enum/pa_enum.project" Active="Yes"/>
+  <Project Name="appWithDlg" Path="../tests/appWithDlg/appWithDlg.project" Active="No"/>
   <BuildMatrix>
     <WorkspaceConfiguration Name="Debug" Selected="yes">
       <Project Name="fdmdv2" ConfigName="Debug"/>
       <Project Name="rawbits" ConfigName="Debug"/>
       <Project Name="pa_enum" ConfigName="Debug"/>
+      <Project Name="appWithDlg" ConfigName="Debug"/>
     </WorkspaceConfiguration>
     <WorkspaceConfiguration Name="Release" Selected="no">
       <Project Name="fdmdv2" ConfigName="Release"/>
       <Project Name="rawbits" ConfigName="Release"/>
       <Project Name="pa_enum" ConfigName="Release"/>
+      <Project Name="appWithDlg" ConfigName="Release"/>
     </WorkspaceConfiguration>
   </BuildMatrix>
 </CodeLite_Workspace>
index 6c657fcb500a3afd7dab5c7fb9cb6c217a28b026..63f1bc78b90e9dea1f0df6019a5a77ab0fd0383a 100644 (file)
@@ -1,3 +1,79 @@
+David Witten wittend@wwrinc.com\r
+10:17 AM (0 minutes ago)\r
+\r
+to david \r
+David,\r
+\r
+First, you mentioned audio breakups you were experiencing on Linux.\r
+My sources related to Portaudio say that this is usually a frame\r
+buffer sizing issue.  More frames introduces latency, but less can\r
+cause breakups in the flow.\r
+\r
+Short answer:  Concerning that header file, assuming that you\r
+downloaded and expanded the PortAudio source tarball (or zip file) you\r
+need a path to [ portaudio/bindings/cpp/source/portaudiocpp/ ] for\r
+your include search.\r
+\r
+You may not want to run against the default windows shared libraries.\r
+I believe that they default to WMMA, which is pretty poor.\r
+\r
+This gets you into the fun parts of building portaudio stuff.  I\r
+attaching that particular file because I can't remember if it was\r
+missing for some reason or just not in an obvious place.\r
+\r
+I have notes about portaudio in fdmdv2/notes,  but the upshot is that\r
+I built the main dll with:\r
+\r
+ ./configure --with-winapi=directx --with-dxdir=/dxsdk\r
+--enable-cxx=yes --enable-shared=yes  --with-host_os=mingw\r
+make\r
+make install\r
+\r
+This puts the libfiles in predictable places in msys's little\r
+universe, so that they can be found by the linker.  This does not\r
+necessarily make them easy to find when you want to run fdmdv2 from\r
+the desktop, so I usually move a copy to wherever I am trying to run\r
+fdmdv2 from.\r
+\r
+I intend to clean up some of this business before I'm done, but the\r
+project as it stands uses portaudio in two ways.  The main structure\r
+of the program accesses portaudio through a thin wrapper that I wrote\r
+(fdmdv_pa_wrapper.h).  The current (largely non-functional)  audio\r
+configuration dialog uses the portaudiocpp binding wrapper provided by\r
+the portaudio bundle.  The code for it lives in [\r
+portaudio/bindings/cpp ] and involves a separate Makefile that lives\r
+in there.  There is no good reason for this, it is the consequence of\r
+multiple strategies I explored.\r
+\r
+Portaudio *can* be built in a way that supports multiple Windows sound\r
+APIs simultaneously.  The FLDigi people seem to have done this.  If\r
+you drop in the dll's lifted from a recent DLDigi implementation for\r
+Windows, GCC will link with them and will see all of the APS's\r
+available.  I posted the question of how to build the DLLs myself in\r
+this way on the appropriate portaudio list and was told that it could\r
+only be done using SCons.  I decided that life was too short for that\r
+right now and just built the dlls for direct sound, which has good\r
+latency and is supported by Microsoft.\r
+\r
+Even restricting myself to DirectSound, I found that things were *not*\r
+completely simple.  I had to locate a version of the direct sound SDK\r
+that had stuff where the build expected it to be.  The most current\r
+ones did not seem to work. I can zip this up and put it into the SVN,\r
+but it is MS's code.\r
+\r
+I also built libraries for ASIO, WMMA, and other options early on, but\r
+it seemed somewhat pointless at that point.  The ones I am using are\r
+just for DirectSound.  I can use the ones from FLDigi if I want.  You\r
+will find my built DLLs scattered around the build, often in the\r
+/Release subfolders.  This is sloppy but is just for my convenience.\r
+\r
+Good luck,\r
+\r
+Dave\r
+\r
+===========================================\r
+!!! Track record trying to build PortAudio\r
+===========================================\r
 \r
 build:\r
 make clean\r
index 66af826c6ed6fb42a7315b7d6aaf26268ee757ba..095af4a50fd1a38c5fdc80730cf2029111297365 100644 (file)
@@ -47,7 +47,7 @@ void AudioDlg::OnApply( wxCommandEvent& event )
 //-------------------------------------------------------------------------
 void AudioDlg::OnClose( wxCloseEvent& event )
 {
-    this->EndModal(wxID_OK);
+    this->EndModal(wxOK);
 }
 
 //-------------------------------------------------------------------------
index 4e4f0cef35085639947753459666a2b54b9113ac..be818a44a0df87947ad9030c7af417fbc54c9bcd 100644 (file)
@@ -30,9 +30,7 @@ class AudioDlg : public DlgAudio
         void OnInitDialog( wxInitDialogEvent& event );
         void OnApply( wxCommandEvent& event );
         void populateStandardSampleRates(
-                wxComboBox* target,
-                const portaudio::DirectionSpecificStreamParameters &inputParameters,
-                const portaudio::DirectionSpecificStreamParameters &outputParameters);
+        wxComboBox* target, const portaudio::DirectionSpecificStreamParameters &inputParameters, const portaudio::DirectionSpecificStreamParameters &outputParameters);
         int populateAudioInfo();
     public:
         /** Constructor */
diff --git a/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp b/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp
new file mode 100644 (file)
index 0000000..ae14e17
--- /dev/null
@@ -0,0 +1,717 @@
+//=========================================================================\r
+// Name:          AudioOptsDialog.cpp\r
+// Purpose:       Implements simple wxWidgets application with GUI\r
+//                created using wxFormBuilder.\r
+// Author:\r
+// Created:\r
+// Copyright:\r
+// License:       wxWidgets license (www.wxwidgets.org)\r
+//\r
+// Notes:         Note that all GUI creation code is implemented in\r
+//                gui.cpp source file which is generated by wxFormBuilder.\r
+//=========================================================================\r
+#include "main.h"\r
+#include "AudioOptsDialog.h"\r
+\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+// AudioOptsDialog()\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+AudioOptsDialog::AudioOptsDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style)\r
+{\r
+    this->SetSizeHints(wxSize(650, 400), wxDefaultSize);\r
+\r
+    m_isPaInitialized = false;\r
+\r
+    // Make an image list containing large icons\r
+    m_imageListNormal = new wxImageList(32, 32, true);\r
+    m_imageListSmall  = new wxImageList(16, 16, true);\r
+\r
+#ifdef __WXMSW__\r
+    // Give it an icon\r
+    SetIcon(wxICON("bitmaps/sample.ico"));\r
+\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchec.ico"),       wxBITMAP_TYPE_ICO));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.ico"),    wxBITMAP_TYPE_ICO));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.ico"),       wxBITMAP_TYPE_ICO));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.ico"),       wxBITMAP_TYPE_ICO));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.ico"),       wxBITMAP_TYPE_ICO));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.ico"),       wxBITMAP_TYPE_ICO));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.ico"),       wxBITMAP_TYPE_ICO));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.ico"),   wxBITMAP_TYPE_ICO));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.ico"),  wxBITMAP_TYPE_ICO));\r
+#else\r
+    // Give it an icon\r
+    SetIcon(wxICON("bitmaps/sample.xpm"));\r
+\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchec.xpm"),       wxBITMAP_TYPE_XPM, -1, -1));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.xpm"),    wxBITMAP_TYPE_XPM, -1, -1));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.xpm"),       wxBITMAP_TYPE_XPM, -1, -1));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.xpm"),       wxBITMAP_TYPE_XPM, -1, -1));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.xpm"),       wxBITMAP_TYPE_XPM, -1, -1));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.xpm"),       wxBITMAP_TYPE_XPM, -1, -1));\r
+    m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.xpm"),       wxBITMAP_TYPE_XPM, -1, -1));\r
+//    m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.xpm"),     wxBITMAP_TYPE_XPM));\r
+//    m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.xpm"),    wxBITMAP_TYPE_XPM));\r
+ #endif\r
+    if(!m_isPaInitialized)\r
+    {\r
+        if((pa_err = Pa_Initialize()) == paNoError)\r
+        {\r
+            m_isPaInitialized = true;\r
+        }\r
+        else\r
+        {\r
+            wxMessageBox(wxT("Port Audio failed to initialize"), wxT("Pa_Initialize"), wxOK);\r
+            return;\r
+        }\r
+    }\r
+\r
+    wxBoxSizer* mainSizer;\r
+    mainSizer = new wxBoxSizer(wxVERTICAL);\r
+    m_panel1 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);\r
+    wxBoxSizer* bSizer4;\r
+    bSizer4 = new wxBoxSizer(wxVERTICAL);\r
+    m_notebook1 = new wxNotebook(m_panel1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_BOTTOM);\r
+    m_panelRx = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);\r
+    wxBoxSizer* bSizer20;\r
+    bSizer20 = new wxBoxSizer(wxVERTICAL);\r
+    wxGridSizer* gSizer4;\r
+    gSizer4 = new wxGridSizer(2, 1, 0, 0);\r
+    wxStaticBoxSizer* sbSizer2;\r
+    sbSizer2 = new wxStaticBoxSizer(new wxStaticBox(m_panelRx, wxID_ANY, _("Rx Radio Device")), wxVERTICAL);\r
+    m_listCtrlRxInDevices = new wxListCtrl(m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES);\r
+    sbSizer2->Add(m_listCtrlRxInDevices, 1, wxALL|wxEXPAND, 1);\r
+    wxBoxSizer* bSizer811;\r
+    bSizer811 = new wxBoxSizer(wxHORIZONTAL);\r
+    m_staticText51 = new wxStaticText(m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText51->Wrap(-1);\r
+    bSizer811->Add(m_staticText51, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+    m_textCtrlRxIn = new wxTextCtrl(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);\r
+    bSizer811->Add(m_textCtrlRxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+    m_staticText6 = new wxStaticText(m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText6->Wrap(-1);\r
+    bSizer811->Add(m_staticText6, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+    m_cbSampleRateRxIn = new wxComboBox(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);\r
+    bSizer811->Add(m_cbSampleRateRxIn, 0, wxALL, 1);\r
+    sbSizer2->Add(bSizer811, 0, wxEXPAND, 5);\r
+    gSizer4->Add(sbSizer2, 1, wxEXPAND, 5);\r
+    wxStaticBoxSizer* sbSizer3;\r
+    sbSizer3 = new wxStaticBoxSizer(new wxStaticBox(m_panelRx, wxID_ANY, _("Rx Speaker Stream")), wxVERTICAL);\r
+    m_listCtrlRxOutDevices = new wxListCtrl(m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES);\r
+    sbSizer3->Add(m_listCtrlRxOutDevices, 1, wxALL|wxEXPAND, 1);\r
+    wxBoxSizer* bSizer81;\r
+    bSizer81 = new wxBoxSizer(wxHORIZONTAL);\r
+    m_staticText9 = new wxStaticText(m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText9->Wrap(-1);\r
+    bSizer81->Add(m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);\r
+    m_textCtrlRxOut = new wxTextCtrl(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);\r
+    bSizer81->Add(m_textCtrlRxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+    m_staticText10 = new wxStaticText(m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText10->Wrap(-1);\r
+    bSizer81->Add(m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+    m_cbSampleRateRxOut = new wxComboBox(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);\r
+    bSizer81->Add(m_cbSampleRateRxOut, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+    sbSizer3->Add(bSizer81, 0, wxEXPAND, 2);\r
+    gSizer4->Add(sbSizer3, 1, wxEXPAND, 2);\r
+    bSizer20->Add(gSizer4, 1, wxEXPAND, 1);\r
+    m_panelRx->SetSizer(bSizer20);\r
+    m_panelRx->Layout();\r
+    bSizer20->Fit(m_panelRx);\r
+    m_notebook1->AddPage(m_panelRx, _("Receive"), true);\r
+    m_panelTx = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);\r
+    wxBoxSizer* bSizer18;\r
+    bSizer18 = new wxBoxSizer(wxVERTICAL);\r
+    wxGridSizer* gSizer2;\r
+    gSizer2 = new wxGridSizer(2, 1, 0, 0);\r
+    wxStaticBoxSizer* sbSizer22;\r
+    sbSizer22 = new wxStaticBoxSizer(new wxStaticBox(m_panelTx, wxID_ANY, _("Tx Microphone Stream")), wxVERTICAL);\r
+    m_listCtrlTxInDevices = new wxListCtrl(m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES);\r
+    sbSizer22->Add(m_listCtrlTxInDevices, 1, wxALL|wxEXPAND, 1);\r
+    wxBoxSizer* bSizer83;\r
+    bSizer83 = new wxBoxSizer(wxHORIZONTAL);\r
+    m_staticText12 = new wxStaticText(m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText12->Wrap(-1);\r
+    bSizer83->Add(m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+    m_textCtrlTxIn = new wxTextCtrl(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);\r
+    bSizer83->Add(m_textCtrlTxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+    m_staticText11 = new wxStaticText(m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText11->Wrap(-1);\r
+    bSizer83->Add(m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+    m_cbSampleRateTxIn = new wxComboBox(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);\r
+    bSizer83->Add(m_cbSampleRateTxIn, 0, wxALL, 1);\r
+    sbSizer22->Add(bSizer83, 0, wxEXPAND, 2);\r
+    gSizer2->Add(sbSizer22, 1, wxEXPAND, 5);\r
+    wxStaticBoxSizer* sbSizer21;\r
+    sbSizer21 = new wxStaticBoxSizer(new wxStaticBox(m_panelTx, wxID_ANY, _("Tx Radio Stream")), wxVERTICAL);\r
+    m_listCtrlTxOutDevices = new wxListCtrl(m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES);\r
+    sbSizer21->Add(m_listCtrlTxOutDevices, 1, wxALL|wxEXPAND, 2);\r
+    wxBoxSizer* bSizer82;\r
+    bSizer82 = new wxBoxSizer(wxHORIZONTAL);\r
+    m_staticText81 = new wxStaticText(m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText81->Wrap(-1);\r
+    bSizer82->Add(m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);\r
+    m_textCtrlTxOut = new wxTextCtrl(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);\r
+    bSizer82->Add(m_textCtrlTxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+    m_staticText71 = new wxStaticText(m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText71->Wrap(-1);\r
+    bSizer82->Add(m_staticText71, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+    m_cbSampleRateTxOut = new wxComboBox(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);\r
+    bSizer82->Add(m_cbSampleRateTxOut, 0, wxALL, 1);\r
+    sbSizer21->Add(bSizer82, 0, wxEXPAND, 2);\r
+    gSizer2->Add(sbSizer21, 1, wxEXPAND, 5);\r
+    bSizer18->Add(gSizer2, 1, wxEXPAND, 1);\r
+    m_panelTx->SetSizer(bSizer18);\r
+    m_panelTx->Layout();\r
+    bSizer18->Fit(m_panelTx);\r
+    m_notebook1->AddPage(m_panelTx, _("Transmit"), false);\r
+    m_panelAPI = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);\r
+    wxBoxSizer* bSizer12;\r
+    bSizer12 = new wxBoxSizer(wxHORIZONTAL);\r
+    wxGridSizer* gSizer31;\r
+    gSizer31 = new wxGridSizer(2, 1, 0, 0);\r
+    wxStaticBoxSizer* sbSizer1;\r
+    sbSizer1 = new wxStaticBoxSizer(new wxStaticBox(m_panelAPI, wxID_ANY, _("PortAudio")), wxVERTICAL);\r
+    wxGridSizer* gSizer3;\r
+    gSizer3 = new wxGridSizer(4, 2, 0, 0);\r
+    m_staticText7 = new wxStaticText(m_panelAPI, wxID_ANY, _("PortAudio Version String:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText7->Wrap(-1);\r
+    gSizer3->Add(m_staticText7, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1);\r
+    wxBoxSizer* bSizer151;\r
+    bSizer151 = new wxBoxSizer(wxVERTICAL);\r
+    m_textStringVer = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY);\r
+    bSizer151->Add(m_textStringVer, 0, wxALL|wxEXPAND, 1);\r
+    gSizer3->Add(bSizer151, 1, wxEXPAND, 2);\r
+    m_staticText8 = new wxStaticText(m_panelAPI, wxID_ANY, _("PortAudio Int Version:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText8->Wrap(-1);\r
+    gSizer3->Add(m_staticText8, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1);\r
+    wxBoxSizer* bSizer13;\r
+    bSizer13 = new wxBoxSizer(wxVERTICAL);\r
+    m_textIntVer = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY);\r
+    bSizer13->Add(m_textIntVer, 0, wxALL|wxALIGN_CENTER_VERTICAL, 1);\r
+    gSizer3->Add(bSizer13, 1, wxEXPAND, 5);\r
+    m_staticText5 = new wxStaticText(m_panelAPI, wxID_ANY, _("Device Count:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText5->Wrap(-1);\r
+    gSizer3->Add(m_staticText5, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1);\r
+    wxBoxSizer* bSizer14;\r
+    bSizer14 = new wxBoxSizer(wxVERTICAL);\r
+    m_textCDevCount = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(45,-1), wxTE_READONLY);\r
+    m_textCDevCount->SetMaxSize(wxSize(45,-1));\r
+    bSizer14->Add(m_textCDevCount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+    gSizer3->Add(bSizer14, 1, wxEXPAND, 5);\r
+    m_staticText4 = new wxStaticText(m_panelAPI, wxID_ANY, _("API Count:"), wxDefaultPosition, wxDefaultSize, 0);\r
+    m_staticText4->Wrap(-1);\r
+    gSizer3->Add(m_staticText4, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1);\r
+    wxBoxSizer* bSizer15;\r
+    bSizer15 = new wxBoxSizer(wxVERTICAL);\r
+    m_textAPICount = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(45,-1), wxTE_READONLY);\r
+    m_textAPICount->SetMaxSize(wxSize(45,-1));\r
+    bSizer15->Add(m_textAPICount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+    gSizer3->Add(bSizer15, 1, wxEXPAND, 5);\r
+    sbSizer1->Add(gSizer3, 1, wxEXPAND, 2);\r
+    gSizer31->Add(sbSizer1, 1, wxEXPAND, 2);\r
+    wxStaticBoxSizer* sbSizer6;\r
+    sbSizer6 = new wxStaticBoxSizer(new wxStaticBox(m_panelAPI, wxID_ANY, _("Other")), wxVERTICAL);\r
+    gSizer31->Add(sbSizer6, 1, wxEXPAND, 5);\r
+    bSizer12->Add(gSizer31, 1, wxEXPAND, 5);\r
+    m_panelAPI->SetSizer(bSizer12);\r
+    m_panelAPI->Layout();\r
+    bSizer12->Fit(m_panelAPI);\r
+    m_notebook1->AddPage(m_panelAPI, _("API Info"), false);\r
+    bSizer4->Add(m_notebook1, 1, wxEXPAND | wxALL, 0);\r
+    m_panel1->SetSizer(bSizer4);\r
+    m_panel1->Layout();\r
+    bSizer4->Fit(m_panel1);\r
+    mainSizer->Add(m_panel1, 1, wxEXPAND | wxALL, 1);\r
+    wxBoxSizer* bSizer6;\r
+    bSizer6 = new wxBoxSizer(wxHORIZONTAL);\r
+    m_btnRefresh = new wxButton(this, wxID_ANY, _("Refresh"), wxDefaultPosition, wxDefaultSize, 0);\r
+    bSizer6->Add(m_btnRefresh, 0, wxALIGN_CENTER|wxALL, 2);\r
+    m_sdbSizer1 = new wxStdDialogButtonSizer();\r
+    m_sdbSizer1OK = new wxButton(this, wxID_OK);\r
+    m_sdbSizer1->AddButton(m_sdbSizer1OK);\r
+    m_sdbSizer1Apply = new wxButton(this, wxID_APPLY);\r
+    m_sdbSizer1->AddButton(m_sdbSizer1Apply);\r
+    m_sdbSizer1Cancel = new wxButton(this, wxID_CANCEL);\r
+    m_sdbSizer1->AddButton(m_sdbSizer1Cancel);\r
+    m_sdbSizer1->Realize();\r
+    bSizer6->Add(m_sdbSizer1, 1, wxALIGN_CENTER_VERTICAL, 2);\r
+    mainSizer->Add(bSizer6, 0, wxEXPAND, 2);\r
+    this->SetSizer(mainSizer);\r
+    this->Layout();\r
+    this->Centre(wxBOTH);\r
+//    this->Centre(wxBOTH);\r
+\r
+    m_notebook1->SetSelection(0);\r
+\r
+    showAPIInfo();\r
+    m_RxInDevices.m_listDevices   = m_listCtrlRxInDevices;\r
+    m_RxInDevices.direction       = AUDIO_IN;\r
+    m_RxInDevices.m_textDevice    = m_textCtrlRxIn;\r
+    m_RxInDevices.m_cbSampleRate  = m_cbSampleRateRxIn;\r
+\r
+    m_RxOutDevices.m_listDevices  = m_listCtrlRxOutDevices;\r
+    m_RxOutDevices.direction      = AUDIO_OUT;\r
+    m_RxOutDevices.m_textDevice   = m_textCtrlRxOut;\r
+    m_RxOutDevices.m_cbSampleRate = m_cbSampleRateRxOut;\r
+\r
+    m_TxInDevices.m_listDevices   = m_listCtrlTxInDevices;\r
+    m_TxInDevices.direction       = AUDIO_IN;\r
+    m_TxInDevices.m_textDevice    = m_textCtrlTxIn;\r
+    m_TxInDevices.m_cbSampleRate  = m_cbSampleRateTxIn;\r
+\r
+    m_TxOutDevices.m_listDevices  = m_listCtrlTxOutDevices;\r
+    m_TxOutDevices.direction      = AUDIO_OUT;\r
+    m_TxOutDevices.m_textDevice   = m_textCtrlTxOut;\r
+    m_TxOutDevices.m_cbSampleRate = m_cbSampleRateTxOut;\r
+\r
+    populateParams(m_RxInDevices);\r
+    populateParams(m_RxOutDevices);\r
+    populateParams(m_TxInDevices);\r
+    populateParams(m_TxOutDevices);\r
+\r
+    m_listCtrlRxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxInDeviceSelect ), NULL, this );\r
+    m_listCtrlRxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxOutDeviceSelect ), NULL, this );\r
+    m_listCtrlTxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxInDeviceSelect ), NULL, this );\r
+    m_listCtrlTxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxOutDeviceSelect ), NULL, this );\r
+    m_btnRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnRefreshClick ), NULL, this );\r
+    m_sdbSizer1Apply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnApplyAudioParameters ), NULL, this );\r
+    m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnCancelAudioParameters ), NULL, this );\r
+    m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnOkAudioParameters ), NULL, this );\r
+/*\r
+        void OnClose( wxCloseEvent& event ) { event.Skip(); }\r
+        void OnHibernate( wxActivateEvent& event ) { event.Skip(); }\r
+        void OnIconize( wxIconizeEvent& event ) { event.Skip(); }\r
+        void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }\r
+*/\r
+//    this->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(AudioOptsDialog::OnClose));\r
+    this->Connect(wxEVT_HIBERNATE, wxActivateEventHandler(AudioOptsDialog::OnHibernate));\r
+    this->Connect(wxEVT_ICONIZE, wxIconizeEventHandler(AudioOptsDialog::OnIconize));\r
+    this->Connect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(AudioOptsDialog::OnInitDialog));\r
+}\r
+\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+// ~AudioOptsDialog()\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+AudioOptsDialog::~AudioOptsDialog()\r
+{\r
+    // Disconnect Events\r
+    this->Disconnect(wxEVT_HIBERNATE, wxActivateEventHandler(AudioOptsDialog::OnHibernate));\r
+    this->Disconnect(wxEVT_ICONIZE, wxIconizeEventHandler(AudioOptsDialog::OnIconize));\r
+    this->Disconnect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(AudioOptsDialog::OnInitDialog));\r
+\r
+    m_listCtrlRxInDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnRxInDeviceSelect), NULL, this);\r
+    m_listCtrlRxOutDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnRxOutDeviceSelect), NULL, this);\r
+    m_listCtrlTxInDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnTxInDeviceSelect), NULL, this);\r
+    m_listCtrlTxOutDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnTxOutDeviceSelect), NULL, this);\r
+    m_btnRefresh->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnRefreshClick), NULL, this);\r
+    m_sdbSizer1Apply->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnApplyAudioParameters), NULL, this);\r
+    m_sdbSizer1Cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnCancelAudioParameters), NULL, this);\r
+    m_sdbSizer1OK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnOkAudioParameters), NULL, this);\r
+}\r
+\r
+//-------------------------------------------------------------------------
+// OnInitDialog()
+//-------------------------------------------------------------------------
+void AudioOptsDialog::OnInitDialog( wxInitDialogEvent& event )
+{
+    ExchangeData(EXCHANGE_DATA_IN);
+    populateAudioInfo();
+}
+
+//-------------------------------------------------------------------------
+// ExchangeData()
+//-------------------------------------------------------------------------
+void AudioOptsDialog::ExchangeData(int inout)
+{
+    wxConfigBase *pConfig = wxConfigBase::Get();
+    if(inout == EXCHANGE_DATA_IN)
+    {
+        m_textRxInput->SetValue(wxGetApp().m_strRxInAudio);
+        m_textTxOutput->SetValue(wxGetApp().m_strRxOutAudio);
+        m_textVoiceInput->SetValue(wxGetApp().m_textVoiceInput);
+        m_textVoiceOutput->SetValue(wxGetApp().m_textVoiceOutput);
+    }
+    if(inout == EXCHANGE_DATA_OUT)
+    {
+        wxGetApp().m_strRxInAudio    = m_textRxInput->GetValue();
+        wxGetApp().m_strRxOutAudio   = m_textTxOutput->GetValue();
+        wxGetApp().m_textVoiceInput  = m_textVoiceInput->GetValue();
+        wxGetApp().m_textVoiceOutput = m_textVoiceOutput->GetValue();
+
+        pConfig->Write(wxT("/Audio/RxIn"),          wxGetApp().m_strRxInAudio);
+        pConfig->Write(wxT("/Audio/RxOut"),         wxGetApp().m_strRxOutAudio);
+        pConfig->Write(wxT("/Audio/TxIn"),          wxGetApp().m_textVoiceInput);
+        pConfig->Write(wxT("/Audio/TxOut"),         wxGetApp().m_textVoiceOutput);
+        pConfig->Write(wxT("/Audio/SampleRate"),    wxGetApp().m_strSampleRate);
+        pConfig->Flush();
+    }
+    delete wxConfigBase::Set((wxConfigBase *) NULL);
+}
+\r
+//-------------------------------------------------------------------------\r
+// OnDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnDeviceSelect(wxListEvent& event)\r
+{\r
+    wxListItem  info;\r
+    long item;\r
+    item = m_listCtrlRxInDevices->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);\r
+    wxMessageBox(m_listCtrlRxInDevices->GetItemText(item, 2), wxT("Item"), wxOK);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// DisplaySupportedSampleRates()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::DisplaySupportedSampleRates(AudioInfoDisplay ai)\r
+{\r
+    static double standardSampleRates[] =\r
+    {\r
+        8000.0,     9600.0,\r
+        11025.0,    12000.0,\r
+        16000.0,    22050.0,\r
+        24000.0,    32000.0,\r
+        44100.0,    48000.0,\r
+        88200.0,    96000.0,\r
+        192000.0,   -1          // negative terminated  list\r
+    };\r
+    int i;\r
+    int printCount;\r
+    PaError err;\r
+    wxString str;\r
+\r
+    printCount = 0;\r
+    for(i = 0; standardSampleRates[i] > 0; i++)\r
+    {\r
+        str.Printf("%8.2f", standardSampleRates[i]);\r
+        ai.m_cbSampleRate->AppendString(str);\r
+/*\r
+        err = Pa_IsFormatSupported(ai->inputParameters, outputParameters, standardSampleRates[i]);\r
+        if(err == paFormatIsSupported)\r
+        {\r
+            if(printCount == 0)\r
+            {\r
+                printf("\t%8.2f", standardSampleRates[i]);\r
+                printCount = 1;\r
+            }\r
+            else if(printCount == 4)\r
+            {\r
+                printf(",\n\t%8.2f", standardSampleRates[i]);\r
+                printCount = 1;\r
+            }\r
+            else\r
+            {\r
+                printf(", %8.2f", standardSampleRates[i]);\r
+                ++printCount;\r
+            }\r
+        }\r
+*/\r
+    }\r
+    ai.m_cbSampleRate->SetSelection(9);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// GetAPIInfo()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::showAPIInfo()\r
+{\r
+    wxString    strval;\r
+    int         apiCount        = 0;\r
+    int         numDevices      = 0;\r
+\r
+    strval = Pa_GetVersionText();\r
+    m_textStringVer->SetValue(strval);\r
+\r
+    numDevices = Pa_GetVersion();\r
+    strval.Printf(wxT("%d"), numDevices);\r
+    m_textIntVer->SetValue(strval);\r
+\r
+    apiCount = Pa_GetHostApiCount();\r
+    strval.Printf(wxT("%d"), apiCount);\r
+    m_textAPICount->SetValue(strval);\r
+\r
+    numDevices = Pa_GetDeviceCount();\r
+    strval.Printf(wxT("%d"), numDevices);\r
+    m_textCDevCount->SetValue(strval);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// populateParams()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::populateParams(AudioInfoDisplay ai)\r
+{\r
+    const       PaDeviceInfo *deviceInfo = NULL;\r
+    int         j       = 0;\r
+    wxListCtrl* ctrl    = ai.m_listDevices;\r
+    int         in_out  = ai.direction;\r
+    long        idx;\r
+    bool        defaultDisplayed = false;\r
+    int         numDevices;\r
+    wxListItem  listItem;\r
+    wxString    buf;\r
+    int         devn;\r
+\r
+    numDevices = Pa_GetDeviceCount();\r
+\r
+    if(ctrl->GetColumnCount() > 0)\r
+    {\r
+        ctrl->ClearAll();\r
+    }\r
+    //ctrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);\r
+\r
+    listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+    listItem.SetText(wxT("Sel"));\r
+    idx = ctrl->InsertColumn(0, listItem);\r
+    ctrl->SetColumnWidth(0, 37);\r
+\r
+    listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+    listItem.SetText(wxT("Dflt"));\r
+    idx = ctrl->InsertColumn(1, listItem);\r
+    ctrl->SetColumnWidth(1, 37);\r
+\r
+    listItem.SetAlign(wxLIST_FORMAT_LEFT);\r
+    listItem.SetText(wxT("Device"));\r
+    idx = ctrl->InsertColumn(2, listItem);\r
+    ctrl->SetColumnWidth(2, 190);\r
+\r
+    listItem.SetAlign(wxLIST_FORMAT_LEFT);\r
+    listItem.SetText(wxT("API"));\r
+    idx = ctrl->InsertColumn(3, listItem);\r
+    ctrl->SetColumnWidth(3, 190);\r
+\r
+    if(in_out == AUDIO_IN)\r
+    {\r
+        listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+        listItem.SetText(wxT("# Inputs"));\r
+        idx = ctrl->InsertColumn(4, listItem);\r
+        ctrl->SetColumnWidth(4, 75);\r
+    }\r
+    else if(in_out == AUDIO_OUT)\r
+    {\r
+        listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+        listItem.SetText(wxT("# Outputs"));\r
+        idx = ctrl->InsertColumn(4, listItem);\r
+        ctrl->SetColumnWidth(4, 75);\r
+    }\r
+\r
+    listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+    listItem.SetText(wxT("Min Latency"));\r
+    ctrl->InsertColumn(5, listItem);\r
+    ctrl->SetColumnWidth(5, 100);\r
+\r
+    listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+    listItem.SetText(wxT("Max Latency"));\r
+    ctrl->InsertColumn(6, listItem);\r
+    ctrl->SetColumnWidth(6, 100);\r
+\r
+    for(devn = 0; devn < numDevices; devn++)\r
+    {\r
+        buf.Printf(wxT(""));\r
+        deviceInfo = Pa_GetDeviceInfo(devn);\r
+        if(in_out == AUDIO_IN)\r
+        {\r
+            if(deviceInfo->maxInputChannels > 0)\r
+            {\r
+                idx = ctrl->InsertItem(j, ICON_TRANSPARENT);\r
+                defaultDisplayed = false;\r
+                if(devn == Pa_GetDefaultInputDevice())\r
+                {\r
+                    buf.Printf("->>");\r
+                    ctrl->SetItem(idx, 1, buf);\r
+                    defaultDisplayed = true;\r
+                }\r
+                else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultInputDevice)\r
+                {\r
+                    buf.Printf("-->");\r
+                    ctrl->SetItem(idx, 1, buf);\r
+                    defaultDisplayed = true;\r
+                }\r
+                else\r
+                {\r
+                    buf.Printf("---");\r
+                    ctrl->SetItem(idx, 1, buf);\r
+                    defaultDisplayed = false;\r
+                }\r
+                buf.Printf(wxT("%s"), deviceInfo->name);\r
+                ctrl->SetItem(idx, 2, buf);\r
+                if(defaultDisplayed)\r
+                {\r
+                    ai.m_textDevice->SetValue(buf);\r
+                }\r
+\r
+                buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name);\r
+                ctrl->SetItem(idx, 3, buf);\r
+\r
+                buf.Printf(wxT("%i"), deviceInfo->maxInputChannels);\r
+                ctrl->SetItem(idx, 4, buf);\r
+\r
+                buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowInputLatency);\r
+                ctrl->SetItem(idx, 5, buf);\r
+\r
+                buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighInputLatency);\r
+                ctrl->SetItem(idx, 6, buf);\r
+            }\r
+        }\r
+        else if(in_out == AUDIO_OUT)\r
+        {\r
+            if(deviceInfo->maxOutputChannels > 0)\r
+            {\r
+                idx = ctrl->InsertItem(j, ICON_TRANSPARENT);\r
+                defaultDisplayed = false;\r
+                if(devn == Pa_GetDefaultOutputDevice())\r
+                {\r
+                    buf.Printf("<<-");\r
+                    ctrl->SetItem(idx, 1, buf);\r
+                    defaultDisplayed = true;\r
+                }\r
+                else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultOutputDevice)\r
+                {\r
+                    buf.Printf("<--");\r
+                    ctrl->SetItem(idx, 1, buf);\r
+                    defaultDisplayed = true;\r
+                }\r
+                else\r
+                {\r
+                    buf.Printf("---");\r
+                    ctrl->SetItem(idx, 1, buf);\r
+                }\r
+                buf.Printf(wxT("%s"), deviceInfo->name);\r
+                ctrl->SetItem(idx, 2, buf);\r
+                if(defaultDisplayed)\r
+                {\r
+                    ai.m_textDevice->SetValue(buf);\r
+                }\r
+\r
+                buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name);\r
+                ctrl->SetItem(idx, 3, buf);\r
+\r
+                buf.Printf(wxT("%i"), deviceInfo->maxOutputChannels);\r
+                ctrl->SetItem(idx, 4, buf);\r
+\r
+                buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowOutputLatency);\r
+                ctrl->SetItem(idx, 5, buf);\r
+\r
+                buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighOutputLatency);\r
+                ctrl->SetItem(idx, 6, buf);\r
+            }\r
+        }\r
+        j++;\r
+    }\r
+    DisplaySupportedSampleRates(ai);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnRxInDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnRxInDeviceSelect(wxListEvent& evt)\r
+{\r
+    wxString str;\r
+    int index = evt.GetIndex();\r
+\r
+    str = m_listCtrlRxInDevices->GetItemText(index, 2);\r
+    m_textCtrlRxIn->SetValue(str);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnRxOutDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnRxOutDeviceSelect(wxListEvent& evt)\r
+{\r
+    wxString str;\r
+    int index = evt.GetIndex();\r
+\r
+    str = m_listCtrlRxOutDevices->GetItemText(index, 2);\r
+    m_textCtrlRxOut->SetValue(str);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnTxInDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnTxInDeviceSelect(wxListEvent& evt)\r
+{\r
+    wxString str;\r
+    int index = evt.GetIndex();\r
+\r
+    str = m_listCtrlTxInDevices->GetItemText(index, 2);\r
+    m_textCtrlTxIn->SetValue(str);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnTxOutDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnTxOutDeviceSelect(wxListEvent& evt)\r
+{\r
+    wxString str;\r
+    int index = evt.GetIndex();\r
+\r
+    str = m_listCtrlTxOutDevices->GetItemText(index, 2);\r
+    m_textCtrlTxOut->SetValue(str);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnRefreshClick()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnRefreshClick(wxCommandEvent& event)\r
+{\r
+    m_notebook1->SetSelection(0);\r
+    showAPIInfo();\r
+    populateParams(m_RxInDevices);\r
+    populateParams(m_RxOutDevices);\r
+    populateParams(m_TxInDevices);\r
+    populateParams(m_TxOutDevices);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnApplyAudioParameters()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnApplyAudioParameters(wxCommandEvent& event)\r
+{\r
+    if(m_isPaInitialized)\r
+    {\r
+        if((pa_err = Pa_Terminate()) == paNoError)\r
+        {\r
+            m_isPaInitialized = false;\r
+        }\r
+        else\r
+        {\r
+            wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK);\r
+        }\r
+    }\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnCancelAudioParameters()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnCancelAudioParameters(wxCommandEvent& event)\r
+{\r
+    if(m_isPaInitialized)\r
+    {\r
+        if((pa_err = Pa_Terminate()) == paNoError)\r
+        {\r
+            m_isPaInitialized = false;\r
+        }\r
+        else\r
+        {\r
+            wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK);\r
+        }\r
+    }\r
+    EndModal(wxCANCEL);
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnOkAudioParameters()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnOkAudioParameters(wxCommandEvent& event)\r
+{\r
+    if(m_isPaInitialized)\r
+    {\r
+        if((pa_err = Pa_Terminate()) == paNoError)\r
+        {\r
+            m_isPaInitialized = false;\r
+        }\r
+        else\r
+        {\r
+            wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK);\r
+        }\r
+    }\r
+    EndModal(wxOK);
+}\r
diff --git a/fdmdv2/tests/pa_enum/AudioOptsDialog.h b/fdmdv2/tests/pa_enum/AudioOptsDialog.h
new file mode 100644 (file)
index 0000000..15330bd
--- /dev/null
@@ -0,0 +1,144 @@
+//=========================================================================\r
+// Name:          AudioInfoDisplay.h
+// Purpose:       Declares simple wxWidgets application with GUI
+//                created using wxFormBuilder.
+// Author:
+// Created:
+// Copyright:
+// License:       wxWidgets license (www.wxwidgets.org)
+//
+// Notes:         Note that all GUI creation code is declared in
+//                gui.h source file which is generated by wxFormBuilder.
+//=========================================================================\r
+#ifndef __AudioOptsDialog__
+#define __AudioOptsDialog__
+
+#include "main.h"
+\r
+#define ID_AUDIO_OPTIONS    1000\r
+#define AUDIO_IN            0\r
+#define AUDIO_OUT           1\r
+\r
+#define ICON_TRANSPARENT    1\r
+#define ICON_CHECK          0\r
+#define ICON_toolchar       2\r
+#define ICON_tooldata       3\r
+#define ICON_toolgame       4\r
+#define ICON_toolnote       5\r
+#define ICON_TOOLTIME       6\r
+#define ICON_INARROW        7\r
+#define ICON_OUTARROW       8\r
+#define EXCHANGE_DATA_IN    0
+#define EXCHANGE_DATA_OUT   1
+
+// gui classes generated by wxFormBuilder
+#include "gui.h"
+#include "portaudio.h"\r
+#ifdef WIN32
+#if PA_USE_ASIO
+#include "pa_asio.h"
+#endif
+#endif
+
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+// AudioInfoDisplay
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+class AudioInfoDisplay
+{\r
+    public:\r
+        wxListCtrl*     m_listDevices;\r
+        int             direction;\r
+        wxTextCtrl*     m_textDevice;\r
+        wxComboBox*     m_cbSampleRate;\r
+};
+\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+// class AudioOptsDialog
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+class AudioOptsDialog : public wxDialog\r
+{\r
+    private:\r
+\r
+    protected:\r
+        PaError         pa_err;
+        bool            m_isPaInitialized;\r
+        wxImageList     *m_imageListNormal;
+        wxImageList     *m_imageListSmall;
+
+        // protected event handlers
+        //void OnCloseFrame( wxCloseEvent& event );
+        void OnDeviceSelect( wxListEvent& event );\r
+
+        //void OnExitClick( wxCommandEvent& event );
+        //void DisplaySupportedSampleRates(const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters);\r
+        void DisplaySupportedSampleRates(AudioInfoDisplay ai);\r
+        void populateParams(AudioInfoDisplay);
+        void showAPIInfo();\r
+\r
+        AudioInfoDisplay m_RxInDevices;\r
+        AudioInfoDisplay m_RxOutDevices;\r
+        AudioInfoDisplay m_TxInDevices;\r
+        AudioInfoDisplay m_TxOutDevices;\r
+        wxPanel* m_panel1;\r
+        wxNotebook* m_notebook1;\r
+        wxPanel* m_panelRx;\r
+        wxListCtrl* m_listCtrlRxInDevices;\r
+        wxStaticText* m_staticText51;\r
+        wxTextCtrl* m_textCtrlRxIn;\r
+        wxStaticText* m_staticText6;\r
+        wxComboBox* m_cbSampleRateRxIn;\r
+        wxListCtrl* m_listCtrlRxOutDevices;\r
+        wxStaticText* m_staticText9;\r
+        wxTextCtrl* m_textCtrlRxOut;\r
+        wxStaticText* m_staticText10;\r
+        wxComboBox* m_cbSampleRateRxOut;\r
+        wxPanel* m_panelTx;\r
+        wxListCtrl* m_listCtrlTxInDevices;\r
+        wxStaticText* m_staticText12;\r
+        wxTextCtrl* m_textCtrlTxIn;\r
+        wxStaticText* m_staticText11;\r
+        wxComboBox* m_cbSampleRateTxIn;\r
+        wxListCtrl* m_listCtrlTxOutDevices;\r
+        wxStaticText* m_staticText81;\r
+        wxTextCtrl* m_textCtrlTxOut;\r
+        wxStaticText* m_staticText71;\r
+        wxComboBox* m_cbSampleRateTxOut;\r
+        wxPanel* m_panelAPI;\r
+        wxStaticText* m_staticText7;\r
+        wxTextCtrl* m_textStringVer;\r
+        wxStaticText* m_staticText8;\r
+        wxTextCtrl* m_textIntVer;\r
+        wxStaticText* m_staticText5;\r
+        wxTextCtrl* m_textCDevCount;\r
+        wxStaticText* m_staticText4;\r
+        wxTextCtrl* m_textAPICount;\r
+        wxButton* m_btnRefresh;\r
+        wxStdDialogButtonSizer* m_sdbSizer1;\r
+        wxButton* m_sdbSizer1OK;\r
+        wxButton* m_sdbSizer1Apply;\r
+        wxButton* m_sdbSizer1Cancel;\r
+\r
+        // Virtual event handlers, overide them in your derived class\r
+        //virtual void OnActivateApp( wxActivateEvent& event ) { event.Skip(); }\r
+//        virtual void OnCloseFrame( wxCloseEvent& event ) { event.Skip(); }\r
+        void OnRxInDeviceSelect( wxListEvent& event );\r
+        void OnRxOutDeviceSelect( wxListEvent& event );\r
+        void OnTxInDeviceSelect( wxListEvent& event );\r
+        void OnTxOutDeviceSelect( wxListEvent& event );\r
+        void OnRefreshClick( wxCommandEvent& event );\r
+        void OnApplyAudioParameters( wxCommandEvent& event );\r
+        void OnCancelAudioParameters( wxCommandEvent& event );\r
+        void OnOkAudioParameters( wxCommandEvent& event );\r
+        // Virtual event handlers, overide them in your derived class\r
+        void OnClose( wxCloseEvent& event ) { event.Skip(); }\r
+        void OnHibernate( wxActivateEvent& event ) { event.Skip(); }\r
+        void OnIconize( wxIconizeEvent& event ) { event.Skip(); }\r
+        void OnInitDialog( wxInitDialogEvent& event );\r
+\r
+    public:\r
+\r
+        AudioOptsDialog( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Audio Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 300,300 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );\r
+        ~AudioOptsDialog();\r
+        void ExchangeData(int inout);\r
+};\r
+#endif //__AudioOptsDialog__
index 2ba6be53bc0b3105a59a12b284f62859546b5af3..4059e356c3b0fefb132ebd4f2e0c4975bc5239a5 100644 (file)
 \r
 MainFrameBase::MainFrameBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )\r
 {\r
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );\r
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );\r
+    this->SetSizeHints( wxDefaultSize, wxDefaultSize );\r
+    this->SetSizeHints( wxDefaultSize, wxDefaultSize );\r
 \r
-       wxBoxSizer* mainSizer;\r
-       mainSizer = new wxBoxSizer( wxVERTICAL );\r
+    m_menuBar = new wxMenuBar( 0 );\r
+    m_menuFile = new wxMenu();\r
+    wxMenuItem* menuFileExit;\r
+    menuFileExit = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("E&xit") ) + wxT('\t') + wxT("Alt+X"), wxEmptyString, wxITEM_NORMAL );\r
+    m_menuFile->Append( menuFileExit );\r
 \r
-       m_panel1 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
-       wxBoxSizer* bSizer4;\r
-       bSizer4 = new wxBoxSizer( wxVERTICAL );\r
+    m_menuBar->Append( m_menuFile, _("&File") );\r
 \r
-       m_notebook1 = new wxNotebook( m_panel1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_BOTTOM );\r
-       m_panelRx = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
-       wxBoxSizer* bSizer20;\r
-       bSizer20 = new wxBoxSizer( wxVERTICAL );\r
+    tools = new wxMenu();\r
+    wxMenuItem* audioOptions;\r
+    audioOptions = new wxMenuItem( tools, ID_AUDIO_OPTIONS, wxString( _("&Audio Options") ) , _("Audio options dialog."), wxITEM_NORMAL );\r
+    tools->Append( audioOptions );\r
 \r
-       wxGridSizer* gSizer4;\r
-       gSizer4 = new wxGridSizer( 2, 1, 0, 0 );\r
+    m_menuBar->Append( tools, _("&Tools") );\r
 \r
-       wxStaticBoxSizer* sbSizer2;\r
-       sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panelRx, wxID_ANY, _("Rx Radio Device") ), wxVERTICAL );\r
+    this->SetMenuBar( m_menuBar );\r
 \r
-       m_listCtrlRxInDevices = new wxListCtrl( m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES );\r
-       sbSizer2->Add( m_listCtrlRxInDevices, 1, wxALL|wxEXPAND, 1 );\r
+    wxBoxSizer* mainSizer;\r
+    mainSizer = new wxBoxSizer( wxVERTICAL );\r
 \r
-       wxBoxSizer* bSizer811;\r
-       bSizer811 = new wxBoxSizer( wxHORIZONTAL );\r
+    m_panel1 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
+    mainSizer->Add( m_panel1, 1, wxEXPAND | wxALL, 5 );\r
 \r
-       m_staticText51 = new wxStaticText( m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText51->Wrap( -1 );\r
-       bSizer811->Add( m_staticText51, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
 \r
-       m_textCtrlRxIn = new wxTextCtrl( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );\r
-       bSizer811->Add( m_textCtrlRxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
+    this->SetSizer( mainSizer );\r
+    this->Layout();\r
+    m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY );\r
 \r
-       m_staticText6 = new wxStaticText( m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText6->Wrap( -1 );\r
-       bSizer811->Add( m_staticText6, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
+    this->Centre( wxBOTH );\r
+    this->Centre( wxBOTH );\r
 \r
-       m_cbSampleRateRxIn = new wxComboBox( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN );\r
-       bSizer811->Add( m_cbSampleRateRxIn, 0, wxALL, 1 );\r
-\r
-\r
-       sbSizer2->Add( bSizer811, 0, wxEXPAND, 5 );\r
-\r
-\r
-       gSizer4->Add( sbSizer2, 1, wxEXPAND, 5 );\r
-\r
-       wxStaticBoxSizer* sbSizer3;\r
-       sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( m_panelRx, wxID_ANY, _("Rx Speaker Stream") ), wxVERTICAL );\r
-\r
-       m_listCtrlRxOutDevices = new wxListCtrl( m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES );\r
-       sbSizer3->Add( m_listCtrlRxOutDevices, 1, wxALL|wxEXPAND, 1 );\r
-\r
-       wxBoxSizer* bSizer81;\r
-       bSizer81 = new wxBoxSizer( wxHORIZONTAL );\r
-\r
-       m_staticText9 = new wxStaticText( m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText9->Wrap( -1 );\r
-       bSizer81->Add( m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );\r
-\r
-       m_textCtrlRxOut = new wxTextCtrl( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );\r
-       bSizer81->Add( m_textCtrlRxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
-\r
-       m_staticText10 = new wxStaticText( m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText10->Wrap( -1 );\r
-       bSizer81->Add( m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
-\r
-       m_cbSampleRateRxOut = new wxComboBox( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN );\r
-       bSizer81->Add( m_cbSampleRateRxOut, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
+    // Connect Events\r
+    this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );\r
+    this->Connect( menuFileExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnExitClick ) );\r
+    this->Connect( audioOptions->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnAudioOptsDialog ) );\r
+}\r
 \r
+MainFrameBase::~MainFrameBase()\r
+{\r
+    // Disconnect Events\r
+    this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );\r
+    this->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnExitClick ) );\r
+    this->Disconnect( ID_AUDIO_OPTIONS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnAudioOptsDialog ) );\r
+}\r
 \r
-       sbSizer3->Add( bSizer81, 0, wxEXPAND, 2 );\r
+/*\r
+AudioOptsDialog::AudioOptsDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )\r
+{\r
+    this->SetSizeHints( wxDefaultSize, wxDefaultSize );\r
+    this->SetSizeHints( wxDefaultSize, wxDefaultSize );\r
 \r
+    wxBoxSizer* mainSizer;\r
+    mainSizer = new wxBoxSizer( wxVERTICAL );\r
 \r
-       gSizer4->Add( sbSizer3, 1, wxEXPAND, 2 );\r
+    m_panel1 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
+    wxBoxSizer* bSizer4;\r
+    bSizer4 = new wxBoxSizer( wxVERTICAL );\r
 \r
+    m_notebook1 = new wxNotebook( m_panel1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_BOTTOM );\r
+    m_panelRx = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
+    wxBoxSizer* bSizer20;\r
+    bSizer20 = new wxBoxSizer( wxVERTICAL );\r
 \r
-       bSizer20->Add( gSizer4, 1, wxEXPAND, 1 );\r
+    wxGridSizer* gSizer4;\r
+    gSizer4 = new wxGridSizer( 2, 1, 0, 0 );\r
 \r
+    wxStaticBoxSizer* sbSizer2;\r
+    sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panelRx, wxID_ANY, _("Rx Radio Device") ), wxVERTICAL );\r
 \r
-       m_panelRx->SetSizer( bSizer20 );\r
-       m_panelRx->Layout();\r
-       bSizer20->Fit( m_panelRx );\r
-       m_notebook1->AddPage( m_panelRx, _("Receive"), true );\r
-       m_panelTx = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
-       wxBoxSizer* bSizer18;\r
-       bSizer18 = new wxBoxSizer( wxVERTICAL );\r
+    m_listCtrlRxInDevices = new wxListCtrl( m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES );\r
+    sbSizer2->Add( m_listCtrlRxInDevices, 1, wxALL|wxEXPAND, 1 );\r
 \r
-       wxGridSizer* gSizer2;\r
-       gSizer2 = new wxGridSizer( 2, 1, 0, 0 );\r
+    wxBoxSizer* bSizer811;\r
+    bSizer811 = new wxBoxSizer( wxHORIZONTAL );\r
 \r
-       wxStaticBoxSizer* sbSizer22;\r
-       sbSizer22 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Microphone Stream") ), wxVERTICAL );\r
+    m_staticText51 = new wxStaticText( m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText51->Wrap( -1 );\r
+    bSizer811->Add( m_staticText51, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
 \r
-       m_listCtrlTxInDevices = new wxListCtrl( m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES );\r
-       sbSizer22->Add( m_listCtrlTxInDevices, 1, wxALL|wxEXPAND, 1 );\r
+    m_textCtrlRxIn = new wxTextCtrl( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );\r
+    bSizer811->Add( m_textCtrlRxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
 \r
-       wxBoxSizer* bSizer83;\r
-       bSizer83 = new wxBoxSizer( wxHORIZONTAL );\r
+    m_staticText6 = new wxStaticText( m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText6->Wrap( -1 );\r
+    bSizer811->Add( m_staticText6, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
 \r
-       m_staticText12 = new wxStaticText( m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText12->Wrap( -1 );\r
-       bSizer83->Add( m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
+    m_cbSampleRateRxIn = new wxComboBox( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN );\r
+    bSizer811->Add( m_cbSampleRateRxIn, 0, wxALL, 1 );\r
 \r
-       m_textCtrlTxIn = new wxTextCtrl( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );\r
-       bSizer83->Add( m_textCtrlTxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
+    sbSizer2->Add( bSizer811, 0, wxEXPAND, 5 );\r
 \r
-       m_staticText11 = new wxStaticText( m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText11->Wrap( -1 );\r
-       bSizer83->Add( m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
+    gSizer4->Add( sbSizer2, 1, wxEXPAND, 5 );\r
 \r
-       m_cbSampleRateTxIn = new wxComboBox( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN );\r
-       bSizer83->Add( m_cbSampleRateTxIn, 0, wxALL, 1 );\r
+    wxStaticBoxSizer* sbSizer3;\r
+    sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( m_panelRx, wxID_ANY, _("Rx Speaker Stream") ), wxVERTICAL );\r
 \r
+    m_listCtrlRxOutDevices = new wxListCtrl( m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES );\r
+    sbSizer3->Add( m_listCtrlRxOutDevices, 1, wxALL|wxEXPAND, 1 );\r
 \r
-       sbSizer22->Add( bSizer83, 0, wxEXPAND, 2 );\r
+    wxBoxSizer* bSizer81;\r
+    bSizer81 = new wxBoxSizer( wxHORIZONTAL );\r
 \r
+    m_staticText9 = new wxStaticText( m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText9->Wrap( -1 );\r
+    bSizer81->Add( m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );\r
 \r
-       gSizer2->Add( sbSizer22, 1, wxEXPAND, 5 );\r
+    m_textCtrlRxOut = new wxTextCtrl( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );\r
+    bSizer81->Add( m_textCtrlRxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
 \r
-       wxStaticBoxSizer* sbSizer21;\r
-       sbSizer21 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Radio Stream") ), wxVERTICAL );\r
+    m_staticText10 = new wxStaticText( m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText10->Wrap( -1 );\r
+    bSizer81->Add( m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
 \r
-       m_listCtrlTxOutDevices = new wxListCtrl( m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES );\r
-       sbSizer21->Add( m_listCtrlTxOutDevices, 1, wxALL|wxEXPAND, 2 );\r
+    m_cbSampleRateRxOut = new wxComboBox( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN );\r
+    bSizer81->Add( m_cbSampleRateRxOut, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
 \r
-       wxBoxSizer* bSizer82;\r
-       bSizer82 = new wxBoxSizer( wxHORIZONTAL );\r
+    sbSizer3->Add( bSizer81, 0, wxEXPAND, 2 );\r
 \r
-       m_staticText81 = new wxStaticText( m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText81->Wrap( -1 );\r
-       bSizer82->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );\r
+    gSizer4->Add( sbSizer3, 1, wxEXPAND, 2 );\r
 \r
-       m_textCtrlTxOut = new wxTextCtrl( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );\r
-       bSizer82->Add( m_textCtrlTxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
+    bSizer20->Add( gSizer4, 1, wxEXPAND, 1 );\r
 \r
-       m_staticText71 = new wxStaticText( m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText71->Wrap( -1 );\r
-       bSizer82->Add( m_staticText71, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
+    m_panelRx->SetSizer( bSizer20 );\r
+    m_panelRx->Layout();\r
+    bSizer20->Fit( m_panelRx );\r
+    m_notebook1->AddPage( m_panelRx, _("Receive"), true );\r
+    m_panelTx = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
+    wxBoxSizer* bSizer18;\r
+    bSizer18 = new wxBoxSizer( wxVERTICAL );\r
 \r
-       m_cbSampleRateTxOut = new wxComboBox( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN );\r
-       bSizer82->Add( m_cbSampleRateTxOut, 0, wxALL, 1 );\r
+    wxGridSizer* gSizer2;\r
+    gSizer2 = new wxGridSizer( 2, 1, 0, 0 );\r
 \r
+    wxStaticBoxSizer* sbSizer22;\r
+    sbSizer22 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Microphone Stream") ), wxVERTICAL );\r
 \r
-       sbSizer21->Add( bSizer82, 0, wxEXPAND, 2 );\r
+    m_listCtrlTxInDevices = new wxListCtrl( m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES );\r
+    sbSizer22->Add( m_listCtrlTxInDevices, 1, wxALL|wxEXPAND, 1 );\r
 \r
+    wxBoxSizer* bSizer83;\r
+    bSizer83 = new wxBoxSizer( wxHORIZONTAL );\r
 \r
-       gSizer2->Add( sbSizer21, 1, wxEXPAND, 5 );\r
+    m_staticText12 = new wxStaticText( m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText12->Wrap( -1 );\r
+    bSizer83->Add( m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
 \r
+    m_textCtrlTxIn = new wxTextCtrl( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );\r
+    bSizer83->Add( m_textCtrlTxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
 \r
-       bSizer18->Add( gSizer2, 1, wxEXPAND, 1 );\r
+    m_staticText11 = new wxStaticText( m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText11->Wrap( -1 );\r
+    bSizer83->Add( m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
 \r
+    m_cbSampleRateTxIn = new wxComboBox( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN );\r
+    bSizer83->Add( m_cbSampleRateTxIn, 0, wxALL, 1 );\r
 \r
-       m_panelTx->SetSizer( bSizer18 );\r
-       m_panelTx->Layout();\r
-       bSizer18->Fit( m_panelTx );\r
-       m_notebook1->AddPage( m_panelTx, _("Transmit"), false );\r
-       m_panelAPI = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
-       wxBoxSizer* bSizer12;\r
-       bSizer12 = new wxBoxSizer( wxHORIZONTAL );\r
+    sbSizer22->Add( bSizer83, 0, wxEXPAND, 2 );\r
 \r
-       wxGridSizer* gSizer31;\r
-       gSizer31 = new wxGridSizer( 2, 1, 0, 0 );\r
+    gSizer2->Add( sbSizer22, 1, wxEXPAND, 5 );\r
 \r
-       wxStaticBoxSizer* sbSizer1;\r
-       sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("PortAudio") ), wxVERTICAL );\r
+    wxStaticBoxSizer* sbSizer21;\r
+    sbSizer21 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Radio Stream") ), wxVERTICAL );\r
 \r
-       wxGridSizer* gSizer3;\r
-       gSizer3 = new wxGridSizer( 4, 2, 0, 0 );\r
+    m_listCtrlTxOutDevices = new wxListCtrl( m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES );\r
+    sbSizer21->Add( m_listCtrlTxOutDevices, 1, wxALL|wxEXPAND, 2 );\r
 \r
-       m_staticText7 = new wxStaticText( m_panelAPI, wxID_ANY, _("PortAudio Version String:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText7->Wrap( -1 );\r
-       gSizer3->Add( m_staticText7, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1 );\r
+    wxBoxSizer* bSizer82;\r
+    bSizer82 = new wxBoxSizer( wxHORIZONTAL );\r
 \r
-       wxBoxSizer* bSizer151;\r
-       bSizer151 = new wxBoxSizer( wxVERTICAL );\r
+    m_staticText81 = new wxStaticText( m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText81->Wrap( -1 );\r
+    bSizer82->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );\r
 \r
-       m_textStringVer = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );\r
-       bSizer151->Add( m_textStringVer, 0, wxALL|wxEXPAND, 1 );\r
+    m_textCtrlTxOut = new wxTextCtrl( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );\r
+    bSizer82->Add( m_textCtrlTxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
 \r
+    m_staticText71 = new wxStaticText( m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText71->Wrap( -1 );\r
+    bSizer82->Add( m_staticText71, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
 \r
-       gSizer3->Add( bSizer151, 1, wxEXPAND, 2 );\r
+    m_cbSampleRateTxOut = new wxComboBox( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN );\r
+    bSizer82->Add( m_cbSampleRateTxOut, 0, wxALL, 1 );\r
 \r
-       m_staticText8 = new wxStaticText( m_panelAPI, wxID_ANY, _("PortAudio Int Version:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText8->Wrap( -1 );\r
-       gSizer3->Add( m_staticText8, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1 );\r
+    sbSizer21->Add( bSizer82, 0, wxEXPAND, 2 );\r
 \r
-       wxBoxSizer* bSizer13;\r
-       bSizer13 = new wxBoxSizer( wxVERTICAL );\r
+    gSizer2->Add( sbSizer21, 1, wxEXPAND, 5 );\r
 \r
-       m_textIntVer = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );\r
-       bSizer13->Add( m_textIntVer, 0, wxALL|wxALIGN_CENTER_VERTICAL, 1 );\r
+    bSizer18->Add( gSizer2, 1, wxEXPAND, 1 );\r
 \r
+    m_panelTx->SetSizer( bSizer18 );\r
+    m_panelTx->Layout();\r
+    bSizer18->Fit( m_panelTx );\r
+    m_notebook1->AddPage( m_panelTx, _("Transmit"), false );\r
+    m_panelAPI = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
+    wxBoxSizer* bSizer12;\r
+    bSizer12 = new wxBoxSizer( wxHORIZONTAL );\r
 \r
-       gSizer3->Add( bSizer13, 1, wxEXPAND, 5 );\r
+    wxGridSizer* gSizer31;\r
+    gSizer31 = new wxGridSizer( 2, 1, 0, 0 );\r
 \r
-       m_staticText5 = new wxStaticText( m_panelAPI, wxID_ANY, _("Device Count:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText5->Wrap( -1 );\r
-       gSizer3->Add( m_staticText5, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1 );\r
+    wxStaticBoxSizer* sbSizer1;\r
+    sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("PortAudio") ), wxVERTICAL );\r
 \r
-       wxBoxSizer* bSizer14;\r
-       bSizer14 = new wxBoxSizer( wxVERTICAL );\r
+    wxGridSizer* gSizer3;\r
+    gSizer3 = new wxGridSizer( 4, 2, 0, 0 );\r
 \r
-       m_textCDevCount = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 45,-1 ), wxTE_READONLY );\r
-       m_textCDevCount->SetMaxSize( wxSize( 45,-1 ) );\r
+    m_staticText7 = new wxStaticText( m_panelAPI, wxID_ANY, _("PortAudio Version String:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText7->Wrap( -1 );\r
+    gSizer3->Add( m_staticText7, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1 );\r
 \r
-       bSizer14->Add( m_textCDevCount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
+    wxBoxSizer* bSizer151;\r
+    bSizer151 = new wxBoxSizer( wxVERTICAL );\r
 \r
+    m_textStringVer = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );\r
+    bSizer151->Add( m_textStringVer, 0, wxALL|wxEXPAND, 1 );\r
 \r
-       gSizer3->Add( bSizer14, 1, wxEXPAND, 5 );\r
+    gSizer3->Add( bSizer151, 1, wxEXPAND, 2 );\r
 \r
-       m_staticText4 = new wxStaticText( m_panelAPI, wxID_ANY, _("API Count:"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       m_staticText4->Wrap( -1 );\r
-       gSizer3->Add( m_staticText4, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1 );\r
+    m_staticText8 = new wxStaticText( m_panelAPI, wxID_ANY, _("PortAudio Int Version:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText8->Wrap( -1 );\r
+    gSizer3->Add( m_staticText8, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1 );\r
 \r
-       wxBoxSizer* bSizer15;\r
-       bSizer15 = new wxBoxSizer( wxVERTICAL );\r
+    wxBoxSizer* bSizer13;\r
+    bSizer13 = new wxBoxSizer( wxVERTICAL );\r
 \r
-       m_textAPICount = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 45,-1 ), wxTE_READONLY );\r
-       m_textAPICount->SetMaxSize( wxSize( 45,-1 ) );\r
+    m_textIntVer = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );\r
+    bSizer13->Add( m_textIntVer, 0, wxALL|wxALIGN_CENTER_VERTICAL, 1 );\r
 \r
-       bSizer15->Add( m_textAPICount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
+    gSizer3->Add( bSizer13, 1, wxEXPAND, 5 );\r
 \r
+    m_staticText5 = new wxStaticText( m_panelAPI, wxID_ANY, _("Device Count:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText5->Wrap( -1 );\r
+    gSizer3->Add( m_staticText5, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1 );\r
 \r
-       gSizer3->Add( bSizer15, 1, wxEXPAND, 5 );\r
+    wxBoxSizer* bSizer14;\r
+    bSizer14 = new wxBoxSizer( wxVERTICAL );\r
 \r
+    m_textCDevCount = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 45,-1 ), wxTE_READONLY );\r
+    m_textCDevCount->SetMaxSize( wxSize( 45,-1 ) );\r
 \r
-       sbSizer1->Add( gSizer3, 1, wxEXPAND, 2 );\r
+    bSizer14->Add( m_textCDevCount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
 \r
+    gSizer3->Add( bSizer14, 1, wxEXPAND, 5 );\r
 \r
-       gSizer31->Add( sbSizer1, 1, wxEXPAND, 2 );\r
+    m_staticText4 = new wxStaticText( m_panelAPI, wxID_ANY, _("API Count:"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    m_staticText4->Wrap( -1 );\r
+    gSizer3->Add( m_staticText4, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1 );\r
 \r
-       wxStaticBoxSizer* sbSizer6;\r
-       sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("Other") ), wxVERTICAL );\r
+    wxBoxSizer* bSizer15;\r
+    bSizer15 = new wxBoxSizer( wxVERTICAL );\r
 \r
+    m_textAPICount = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 45,-1 ), wxTE_READONLY );\r
+    m_textAPICount->SetMaxSize( wxSize( 45,-1 ) );\r
 \r
-       gSizer31->Add( sbSizer6, 1, wxEXPAND, 5 );\r
+    bSizer15->Add( m_textAPICount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
 \r
+    gSizer3->Add( bSizer15, 1, wxEXPAND, 5 );\r
 \r
-       bSizer12->Add( gSizer31, 1, wxEXPAND, 5 );\r
+    sbSizer1->Add( gSizer3, 1, wxEXPAND, 2 );\r
 \r
+    gSizer31->Add( sbSizer1, 1, wxEXPAND, 2 );\r
 \r
-       m_panelAPI->SetSizer( bSizer12 );\r
-       m_panelAPI->Layout();\r
-       bSizer12->Fit( m_panelAPI );\r
-       m_notebook1->AddPage( m_panelAPI, _("API Info"), false );\r
+    wxStaticBoxSizer* sbSizer6;\r
+    sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("Other") ), wxVERTICAL );\r
 \r
-       bSizer4->Add( m_notebook1, 1, wxEXPAND | wxALL, 0 );\r
+    gSizer31->Add( sbSizer6, 1, wxEXPAND, 5 );\r
 \r
+    bSizer12->Add( gSizer31, 1, wxEXPAND, 5 );\r
 \r
-       m_panel1->SetSizer( bSizer4 );\r
-       m_panel1->Layout();\r
-       bSizer4->Fit( m_panel1 );\r
-       mainSizer->Add( m_panel1, 1, wxEXPAND | wxALL, 1 );\r
+    m_panelAPI->SetSizer( bSizer12 );\r
+    m_panelAPI->Layout();\r
+    bSizer12->Fit( m_panelAPI );\r
+    m_notebook1->AddPage( m_panelAPI, _("API Info"), false );\r
 \r
-       wxBoxSizer* bSizer6;\r
-       bSizer6 = new wxBoxSizer( wxHORIZONTAL );\r
+    bSizer4->Add( m_notebook1, 1, wxEXPAND | wxALL, 0 );\r
 \r
-       m_btnRefresh = new wxButton( this, wxID_ANY, _("Refresh"), wxDefaultPosition, wxDefaultSize, 0 );\r
-       bSizer6->Add( m_btnRefresh, 0, wxALIGN_CENTER|wxALL, 2 );\r
+    m_panel1->SetSizer( bSizer4 );\r
+    m_panel1->Layout();\r
+    bSizer4->Fit( m_panel1 );\r
+    mainSizer->Add( m_panel1, 1, wxEXPAND | wxALL, 1 );\r
 \r
-       m_sdbSizer1 = new wxStdDialogButtonSizer();\r
-       m_sdbSizer1OK = new wxButton( this, wxID_OK );\r
-       m_sdbSizer1->AddButton( m_sdbSizer1OK );\r
-       m_sdbSizer1Apply = new wxButton( this, wxID_APPLY );\r
-       m_sdbSizer1->AddButton( m_sdbSizer1Apply );\r
-       m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL );\r
-       m_sdbSizer1->AddButton( m_sdbSizer1Cancel );\r
-       m_sdbSizer1->Realize();\r
+    wxBoxSizer* bSizer6;\r
+    bSizer6 = new wxBoxSizer( wxHORIZONTAL );\r
 \r
-       bSizer6->Add( m_sdbSizer1, 1, wxALIGN_CENTER_VERTICAL, 2 );\r
+    m_btnRefresh = new wxButton( this, wxID_ANY, _("Refresh"), wxDefaultPosition, wxDefaultSize, 0 );\r
+    bSizer6->Add( m_btnRefresh, 0, wxALIGN_CENTER|wxALL, 2 );\r
 \r
+    m_sdbSizer1 = new wxStdDialogButtonSizer();\r
+    m_sdbSizer1OK = new wxButton( this, wxID_OK );\r
+    m_sdbSizer1->AddButton( m_sdbSizer1OK );\r
+    m_sdbSizer1Apply = new wxButton( this, wxID_APPLY );\r
+    m_sdbSizer1->AddButton( m_sdbSizer1Apply );\r
+    m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL );\r
+    m_sdbSizer1->AddButton( m_sdbSizer1Cancel );\r
+    m_sdbSizer1->Realize();\r
 \r
-       mainSizer->Add( bSizer6, 0, wxEXPAND, 2 );\r
+    bSizer6->Add( m_sdbSizer1, 1, wxALIGN_CENTER_VERTICAL, 2 );\r
 \r
+    mainSizer->Add( bSizer6, 0, wxEXPAND, 2 );\r
 \r
-       this->SetSizer( mainSizer );\r
-       this->Layout();\r
+    this->SetSizer( mainSizer );\r
+    this->Layout();\r
 \r
-       this->Centre( wxBOTH );\r
-       this->Centre( wxBOTH );\r
+    this->Centre( wxBOTH );\r
+    this->Centre( wxBOTH );\r
 \r
-       // Connect Events\r
-       this->Connect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) );this->Connect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) );\r
-       this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );\r
-       m_listCtrlRxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxInDeviceSelect ), NULL, this );\r
-       m_listCtrlRxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxOutDeviceSelect ), NULL, this );\r
-       m_listCtrlTxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxInDeviceSelect ), NULL, this );\r
-       m_listCtrlTxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxOutDeviceSelect ), NULL, this );\r
-       m_btnRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnRefreshClick ), NULL, this );\r
-       m_sdbSizer1Apply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnApplyAudioParameters ), NULL, this );\r
-       m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnCancelAudioParameters ), NULL, this );\r
-       m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnOkAudioParameters ), NULL, this );\r
+    // Connect Events\r
+//    this->Connect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( AudioOptsDialog::OnActivateApp ) );\r
+//    this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AudioOptsDialog::OnCloseFrame ) );\r
+    m_listCtrlRxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxInDeviceSelect ), NULL, this );\r
+    m_listCtrlRxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxOutDeviceSelect ), NULL, this );\r
+    m_listCtrlTxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxInDeviceSelect ), NULL, this );\r
+    m_listCtrlTxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxOutDeviceSelect ), NULL, this );\r
+    m_btnRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnRefreshClick ), NULL, this );\r
+    m_sdbSizer1Apply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnApplyAudioParameters ), NULL, this );\r
+    m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnCancelAudioParameters ), NULL, this );\r
+    m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnOkAudioParameters ), NULL, this );\r
+    // Connect Events\r
+    this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AudioOptsDialog::OnClose ) );\r
+    this->Connect( wxEVT_HIBERNATE, wxActivateEventHandler( AudioOptsDialog::OnHibernate ) );\r
+    this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( AudioOptsDialog::OnIconize ) );\r
+    this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( AudioOptsDialog::OnInitDialog ));\r
 }\r
 \r
-MainFrameBase::~MainFrameBase()\r
+AudioOptsDialog::~AudioOptsDialog()\r
 {\r
-       // Disconnect Events\r
-       this->Disconnect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) );this->Disconnect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) );\r
-       this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );\r
-       m_listCtrlRxInDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxInDeviceSelect ), NULL, this );\r
-       m_listCtrlRxOutDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxOutDeviceSelect ), NULL, this );\r
-       m_listCtrlTxInDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxInDeviceSelect ), NULL, this );\r
-       m_listCtrlTxOutDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxOutDeviceSelect ), NULL, this );\r
-       m_btnRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnRefreshClick ), NULL, this );\r
-       m_sdbSizer1Apply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnApplyAudioParameters ), NULL, this );\r
-       m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnCancelAudioParameters ), NULL, this );\r
-       m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnOkAudioParameters ), NULL, this );\r
+    // Disconnect Events\r
+    this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AudioOptsDialog::OnClose));\r
+    this->Disconnect( wxEVT_HIBERNATE, wxActivateEventHandler( AudioOptsDialog::OnHibernate));\r
+    this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( AudioOptsDialog::OnIconize));\r
+    this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( AudioOptsDialog::OnInitDialog));\r
+\r
+    // Disconnect Events\r
+//    this->Disconnect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( AudioOptsDialog::OnActivateApp ) );\r
+//    this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AudioOptsDialog::OnCloseFrame ) );\r
+    m_listCtrlRxInDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxInDeviceSelect ), NULL, this );\r
+    m_listCtrlRxOutDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxOutDeviceSelect ), NULL, this );\r
+    m_listCtrlTxInDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxInDeviceSelect ), NULL, this );\r
+    m_listCtrlTxOutDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxOutDeviceSelect ), NULL, this );\r
+    m_btnRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnRefreshClick ), NULL, this );\r
+    m_sdbSizer1Apply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnApplyAudioParameters ), NULL, this );\r
+    m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnCancelAudioParameters ), NULL, this );\r
+    m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnOkAudioParameters ), NULL, this );\r
 \r
 }\r
+*/\r
index 821e7cf421d04aede0accb06cc2e9ae890cda5c5..7ab29552226850e98ff4c9720311d325385172e3 100644 (file)
@@ -12,6 +12,7 @@
 #include <wx/xrc/xmlres.h>\r
 #include <wx/intl.h>\r
 #include <wx/listctrl.h>\r
+#include <wx/menu.h>\r
 #include <wx/gdicmn.h>\r
 #include <wx/font.h>\r
 #include <wx/colour.h>\r
 #include <wx/notebook.h>\r
 #include <wx/button.h>\r
 #include <wx/frame.h>\r
+#include <wx/dialog.h>\r
 \r
 ///////////////////////////////////////////////////////////////////////////\r
-\r
+#define ID_AUDIO_OPTIONS 1000\r
 \r
 ///////////////////////////////////////////////////////////////////////////////\r
 /// Class MainFrameBase\r
 ///////////////////////////////////////////////////////////////////////////////\r
 class MainFrameBase : public wxFrame\r
 {\r
-       private:\r
-\r
-       protected:\r
-               wxPanel* m_panel1;\r
-               wxNotebook* m_notebook1;\r
-               wxPanel* m_panelRx;\r
-               wxListCtrl* m_listCtrlRxInDevices;\r
-               wxStaticText* m_staticText51;\r
-               wxTextCtrl* m_textCtrlRxIn;\r
-               wxStaticText* m_staticText6;\r
-               wxComboBox* m_cbSampleRateRxIn;\r
-               wxListCtrl* m_listCtrlRxOutDevices;\r
-               wxStaticText* m_staticText9;\r
-               wxTextCtrl* m_textCtrlRxOut;\r
-               wxStaticText* m_staticText10;\r
-               wxComboBox* m_cbSampleRateRxOut;\r
-               wxPanel* m_panelTx;\r
-               wxListCtrl* m_listCtrlTxInDevices;\r
-               wxStaticText* m_staticText12;\r
-               wxTextCtrl* m_textCtrlTxIn;\r
-               wxStaticText* m_staticText11;\r
-               wxComboBox* m_cbSampleRateTxIn;\r
-               wxListCtrl* m_listCtrlTxOutDevices;\r
-               wxStaticText* m_staticText81;\r
-               wxTextCtrl* m_textCtrlTxOut;\r
-               wxStaticText* m_staticText71;\r
-               wxComboBox* m_cbSampleRateTxOut;\r
-               wxPanel* m_panelAPI;\r
-               wxStaticText* m_staticText7;\r
-               wxTextCtrl* m_textStringVer;\r
-               wxStaticText* m_staticText8;\r
-               wxTextCtrl* m_textIntVer;\r
-               wxStaticText* m_staticText5;\r
-               wxTextCtrl* m_textCDevCount;\r
-               wxStaticText* m_staticText4;\r
-               wxTextCtrl* m_textAPICount;\r
-               wxButton* m_btnRefresh;\r
-               wxStdDialogButtonSizer* m_sdbSizer1;\r
-               wxButton* m_sdbSizer1OK;\r
-               wxButton* m_sdbSizer1Apply;\r
-               wxButton* m_sdbSizer1Cancel;\r
-\r
-               // Virtual event handlers, overide them in your derived class\r
-               virtual void OnActivateApp( wxActivateEvent& event ) { event.Skip(); }\r
-               virtual void OnCloseFrame( wxCloseEvent& event ) { event.Skip(); }\r
-               virtual void OnRxInDeviceSelect( wxListEvent& event ) { event.Skip(); }\r
-               virtual void OnRxOutDeviceSelect( wxListEvent& event ) { event.Skip(); }\r
-               virtual void OnTxInDeviceSelect( wxListEvent& event ) { event.Skip(); }\r
-               virtual void OnTxOutDeviceSelect( wxListEvent& event ) { event.Skip(); }\r
-               virtual void OnRefreshClick( wxCommandEvent& event ) { event.Skip(); }\r
-               virtual void OnApplyAudioParameters( wxCommandEvent& event ) { event.Skip(); }\r
-               virtual void OnCancelAudioParameters( wxCommandEvent& event ) { event.Skip(); }\r
-               virtual void OnOkAudioParameters( wxCommandEvent& event ) { event.Skip(); }\r
-\r
-\r
-       public:\r
-\r
-               MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PortAudio Device Enumeration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 690,400 ), long style = wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );\r
-//             MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PortAudio Device Enumeration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 690,400 ), long style = wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );\r
-\r
-               ~MainFrameBase();\r
-\r
+    private:\r
+\r
+    protected:\r
+        wxMenuBar* m_menuBar;\r
+        wxMenu* m_menuFile;\r
+        wxMenu* tools;\r
+        wxPanel* m_panel1;\r
+        wxStatusBar* m_statusBar;\r
+\r
+        // Virtual event handlers, overide them in your derived class\r
+        virtual void OnCloseFrame( wxCloseEvent& event ) { event.Skip(); }\r
+        virtual void OnExitClick( wxCommandEvent& event ) { event.Skip(); }\r
+        virtual void OnAudioOptsDialog( wxCommandEvent& event ) { event.Skip(); }\r
+\r
+    public:\r
+        MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PortAudio Device Enumeration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 690,400 ), long style = wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );\r
+       ~MainFrameBase();\r
 };\r
 \r
 #endif //__GUI_H__\r
index f84fd8598209f80b00eac9ea6760d712f48ef9cc..90235bc22c4da74c7aaa22f969a153b649a99518 100644 (file)
@@ -11,7 +11,7 @@
 //                 gui.cpp source file which is generated by wxFormBuilder.\r
 //=========================================================================\r
 #include "main.h"\r
-\r
+#include "AudioOptsDialog.h"\r
 // initialize the application\r
 IMPLEMENT_APP(MainApp);\r
 \r
@@ -27,94 +27,13 @@ bool MainApp::OnInit()
 }\r
 \r
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
-// main application frame implementation\r
+// class MainFrame()\r
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
 MainFrame::MainFrame(wxWindow *parent) : MainFrameBase(parent)\r
 {\r
-    m_isPaInitialized = false;\r
     wxInitAllImageHandlers();\r
 \r
-    // Make an image list containing large icons\r
-    m_imageListNormal = new wxImageList(32, 32, true);\r
-    m_imageListSmall = new wxImageList(16, 16, true);\r
-\r
-#ifdef __WXMSW__\r
-    // Give it an icon\r
-    SetIcon(wxICON("bitmaps/sample.ico"));\r
-\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchec.ico"), wxBITMAP_TYPE_ICO));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.ico"), wxBITMAP_TYPE_ICO));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.ico"), wxBITMAP_TYPE_ICO));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.ico"), wxBITMAP_TYPE_ICO));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.ico"), wxBITMAP_TYPE_ICO));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.ico"), wxBITMAP_TYPE_ICO));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.ico"), wxBITMAP_TYPE_ICO));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.ico"), wxBITMAP_TYPE_ICO));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.ico"), wxBITMAP_TYPE_ICO));\r
-#else\r
-    // Give it an icon\r
-    SetIcon(wxICON("bitmaps/sample.xpm"));\r
-\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchec.xpm"), wxBITMAP_TYPE_XPM));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.xpm"), wxBITMAP_TYPE_XPM));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.xpm"), wxBITMAP_TYPE_XPM));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.xpm"), wxBITMAP_TYPE_XPM));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.xpm"), wxBITMAP_TYPE_XPM));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.xpm"), wxBITMAP_TYPE_XPM));\r
-    m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.xpm"), wxBITMAP_TYPE_XPM));\r
-//    m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.xpm"), wxBITMAP_TYPE_XPM));\r
-//    m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.xpm"), wxBITMAP_TYPE_XPM));\r
-/*\r
-    m_imageListNormal->Add(wxIcon( toolbrai_xpm ));\r
-    m_imageListNormal->Add(wxIcon( toolchar_xpm ));\r
-    m_imageListNormal->Add(wxIcon( tooldata_xpm ));\r
-    m_imageListNormal->Add(wxIcon( toolnote_xpm ));\r
-    m_imageListNormal->Add(wxIcon( tooltodo_xpm ));\r
-    m_imageListNormal->Add(wxIcon( toolchec_xpm ));\r
-    m_imageListNormal->Add(wxIcon( toolgame_xpm ));\r
-    m_imageListNormal->Add(wxIcon( tooltime_xpm ));\r
-    m_imageListNormal->Add(wxIcon( toolword_xpm ));\r
-    m_imageListSmall->Add(wxIcon(small1_xpm));\r
-*/\r
-#endif\r
-    if(!m_isPaInitialized)\r
-    {\r
-        if((pa_err = Pa_Initialize()) == paNoError)\r
-        {\r
-            m_isPaInitialized = true;\r
-        }\r
-        else\r
-        {\r
-            wxMessageBox(wxT("Port Audio failed to initialize"), wxT("Pa_Initialize"), wxOK);\r
-            return;\r
-        }\r
-    }\r
-    m_notebook1->SetSelection(0);\r
-    showAPIInfo();\r
-    m_RxInDevices.m_listDevices   = m_listCtrlRxInDevices;\r
-    m_RxInDevices.direction       = AUDIO_IN;\r
-    m_RxInDevices.m_textDevice    = m_textCtrlRxIn;\r
-    m_RxInDevices.m_cbSampleRate  = m_cbSampleRateRxIn;\r
-\r
-    m_RxOutDevices.m_listDevices  = m_listCtrlRxOutDevices;\r
-    m_RxOutDevices.direction      = AUDIO_OUT;\r
-    m_RxOutDevices.m_textDevice   = m_textCtrlRxOut;\r
-    m_RxOutDevices.m_cbSampleRate = m_cbSampleRateRxOut;\r
-\r
-    m_TxInDevices.m_listDevices   = m_listCtrlTxInDevices;\r
-    m_TxInDevices.direction       = AUDIO_IN;\r
-    m_TxInDevices.m_textDevice    = m_textCtrlTxIn;\r
-    m_TxInDevices.m_cbSampleRate  = m_cbSampleRateTxIn;\r
-\r
-    m_TxOutDevices.m_listDevices  = m_listCtrlTxOutDevices;\r
-    m_TxOutDevices.direction      = AUDIO_OUT;\r
-    m_TxOutDevices.m_textDevice   = m_textCtrlTxOut;\r
-    m_TxOutDevices.m_cbSampleRate = m_cbSampleRateTxOut;\r
-\r
-    populateParams(m_RxInDevices);\r
-    populateParams(m_RxOutDevices);\r
-    populateParams(m_TxInDevices);\r
-    populateParams(m_TxOutDevices);\r
+    this->Connect(ID_AUDIO_OPTIONS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainFrame::OnAudioOptsDialog));\r
 }\r
 \r
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
@@ -122,413 +41,37 @@ MainFrame::MainFrame(wxWindow *parent) : MainFrameBase(parent)
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
 MainFrame::~MainFrame()\r
 {\r
+    this->Disconnect(ID_AUDIO_OPTIONS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainFrame::OnAudioOptsDialog));\r
 }\r
 \r
-//-------------------------------------------------------------------------\r
-// OnCloseFrame()\r
-//-------------------------------------------------------------------------\r
+//-------------------------------------------------------------------------
+// OnToolsAudioUI()
+//-------------------------------------------------------------------------
 void MainFrame::OnCloseFrame(wxCloseEvent& event)
 {\r
-    if(m_isPaInitialized)\r
-    {\r
-        if((pa_err = Pa_Terminate()) == paNoError)\r
-        {\r
-            m_isPaInitialized = false;\r
-        }\r
-        else\r
-        {\r
-            wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK);\r
-        }\r
-    }\r
     Destroy();
 }
 
-//-------------------------------------------------------------------------\r
-// OnExitClick()\r
-//-------------------------------------------------------------------------\r
+//-------------------------------------------------------------------------
+// OnToolsAudioUI()
+//-------------------------------------------------------------------------
 void MainFrame::OnExitClick(wxCommandEvent& event)
 {\r
-    if(m_isPaInitialized)\r
-    {\r
-        if((pa_err = Pa_Terminate()) == paNoError)\r
-        {\r
-            m_isPaInitialized = false;\r
-        }\r
-        else\r
-        {\r
-            wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK);\r
-        }\r
-    }\r
     Destroy();
 }
 \r
-/*\r
-//-------------------------------------------------------------------------\r
-// getSelectedItems()\r
-//-------------------------------------------------------------------------\r
-long *MainFrame::getSelectedItems(wxListCtrl*listCtrl)\r
-{\r
-    long *items[];\r
-    long item = listCtrl->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);\r
-    items[0] = item;\r
-    while ( item != -1 )\r
-    {\r
-        wxLogMessage(wxT("\t%ld (%s)"), item, listCtrl->GetItemText(item).c_str());\r
-        if ( ++shownCount > 10 )\r
-        {\r
-            wxLogMessage(wxT("\t... more selected items snipped..."));\r
-            break;\r
-        }\r
-        item = listCtrl->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);\r
-    }\r
-} return items;\r
-*/\r
-\r
-//-------------------------------------------------------------------------\r
-// OnDeviceSelect()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::OnDeviceSelect( wxListEvent& event )\r
-{\r
-    wxListItem  info;\r
-    long item;\r
-    item = m_listCtrlRxInDevices->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);\r
-    wxMessageBox(m_listCtrlRxInDevices->GetItemText(item, 2), wxT("Item"), wxOK);\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// DisplaySupportedSampleRates()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::DisplaySupportedSampleRates(const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters)\r
-{\r
-    static double standardSampleRates[] =\r
-    {\r
-        8000.0,     9600.0,\r
-        11025.0,    12000.0,\r
-        16000.0,    22050.0,\r
-        24000.0,    32000.0,\r
-        44100.0,    48000.0,\r
-        88200.0,    96000.0,\r
-        192000.0,   -1          // negative terminated  list\r
-    };\r
-    int i;\r
-    int printCount;\r
-    PaError err;\r
-\r
-    printCount = 0;\r
-    for(i=0; standardSampleRates[i] > 0; i++)\r
-    {\r
-        err = Pa_IsFormatSupported(inputParameters, outputParameters, standardSampleRates[i]);\r
-        if(err == paFormatIsSupported)\r
-        {\r
-            if(printCount == 0)\r
-            {\r
-                printf("\t%8.2f", standardSampleRates[i]);\r
-                printCount = 1;\r
-            }\r
-            else if(printCount == 4)\r
-            {\r
-                printf(",\n\t%8.2f", standardSampleRates[i]);\r
-                printCount = 1;\r
-            }\r
-            else\r
-            {\r
-                printf(", %8.2f", standardSampleRates[i]);\r
-                ++printCount;\r
-            }\r
-        }\r
-    }\r
-    if(!printCount)\r
-    {\r
-        printf("None\n");\r
-    }\r
-    else\r
-    {\r
-        printf("\n");\r
-    }\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// GetAPIInfo()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::showAPIInfo()\r
-{\r
-    wxString    strval;\r
-    int         apiCount        = 0;\r
-    int         numDevices      = 0;\r
-\r
-    strval = Pa_GetVersionText();\r
-    m_textStringVer->SetValue(strval);\r
-\r
-    numDevices = Pa_GetVersion();\r
-    strval.Printf(wxT("%d"), numDevices);\r
-    m_textIntVer->SetValue(strval);\r
-\r
-    apiCount = Pa_GetHostApiCount();\r
-    strval.Printf(wxT("%d"), apiCount);\r
-    m_textAPICount->SetValue(strval);\r
-\r
-    numDevices = Pa_GetDeviceCount();\r
-    strval.Printf(wxT("%d"), numDevices);\r
-    m_textCDevCount->SetValue(strval);\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// populateParams()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::populateParams(AudioInfoDisplay ai)    //wxListCtrl* ctrl, int in_out)\r
-{\r
-    const       PaDeviceInfo *deviceInfo = NULL;\r
-    int         j                        = 0;\r
-    wxListCtrl* ctrl                     = ai.m_listDevices;\r
-    int         in_out                   = ai.direction;\r
-    //wxTextCtrl* txtCtrl                  = ai.m_textDevice;\r
-    //wxComboBox* cb                       = ai.m_cbSampleRate;\r
-    long        idx;\r
-    int         defaultDisplayed;\r
-    int         numDevices;\r
-    wxListItem  listItem;\r
-    wxString    buf;\r
-    int         devn;\r
-\r
-    numDevices = Pa_GetDeviceCount();\r
-\r
-    if(ctrl->GetColumnCount() > 0)\r
-    {\r
-        ctrl->ClearAll();\r
-    }\r
-    ctrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);\r
-\r
-    listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
-    listItem.SetText(wxT("Sel"));\r
-    idx = ctrl->InsertColumn(0, listItem);\r
-    ctrl->SetColumnWidth(0, 37);\r
-\r
-    listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
-    listItem.SetText(wxT("Dflt"));\r
-    idx = ctrl->InsertColumn(1, listItem);\r
-    ctrl->SetColumnWidth(1, 37);\r
-\r
-    listItem.SetAlign(wxLIST_FORMAT_LEFT);\r
-    listItem.SetText(wxT("Device"));\r
-    idx = ctrl->InsertColumn(2, listItem);\r
-    ctrl->SetColumnWidth(2, 190);\r
-\r
-    listItem.SetAlign(wxLIST_FORMAT_LEFT);\r
-    listItem.SetText(wxT("API"));\r
-    idx = ctrl->InsertColumn(3, listItem);\r
-    ctrl->SetColumnWidth(3, 190);\r
-\r
-    if(in_out == AUDIO_IN)\r
-    {\r
-        listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
-        listItem.SetText(wxT("# Inputs"));\r
-        idx = ctrl->InsertColumn(4, listItem);\r
-        ctrl->SetColumnWidth(4, 75);\r
-    }\r
-    else if(in_out == AUDIO_OUT)\r
-    {\r
-        listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
-        listItem.SetText(wxT("# Outputs"));\r
-        idx = ctrl->InsertColumn(4, listItem);\r
-        ctrl->SetColumnWidth(4, 75);\r
-    }\r
-\r
-    listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
-    listItem.SetText(wxT("Min Latency"));\r
-    ctrl->InsertColumn(5, listItem);\r
-    ctrl->SetColumnWidth(5, 100);\r
-\r
-    listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
-    listItem.SetText(wxT("Max Latency"));\r
-    ctrl->InsertColumn(6, listItem);\r
-    ctrl->SetColumnWidth(6, 100);\r
-\r
-     for(devn = 0; devn < numDevices; devn++)\r
-    {\r
-        buf.Printf(wxT(""));\r
-        deviceInfo = Pa_GetDeviceInfo(devn);\r
-        if(in_out == AUDIO_IN)\r
-        {\r
-            if(deviceInfo->maxInputChannels > 0)\r
-            {\r
-                idx = ctrl->InsertItem(j, ICON_TRANSPARENT);\r
-                defaultDisplayed = false;\r
-                if(devn == Pa_GetDefaultInputDevice())\r
-                {\r
-                    buf.Printf("->>");\r
-                    ctrl->SetItem(idx, 1, buf);\r
-                    defaultDisplayed = true;\r
-                }\r
-                else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultInputDevice)\r
-                {\r
-                    buf.Printf("-->");\r
-                    ctrl->SetItem(idx, 1, buf);\r
-                    defaultDisplayed = true;\r
-                }\r
-                else\r
-                {\r
-                    buf.Printf("---");\r
-                    ctrl->SetItem(idx, 1, buf);\r
-                }\r
-                buf.Printf(wxT("%s"), deviceInfo->name);\r
-                ctrl->SetItem(idx, 2, buf);\r
-\r
-                buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name);\r
-                ctrl->SetItem(idx, 3, buf);\r
-\r
-                buf.Printf(wxT("%i"), deviceInfo->maxInputChannels);\r
-                ctrl->SetItem(idx, 4, buf);\r
-\r
-                buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowInputLatency);\r
-                ctrl->SetItem(idx, 5, buf);\r
-\r
-                buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighInputLatency);\r
-                ctrl->SetItem(idx, 6, buf);\r
-            }\r
-        }\r
-        else if(in_out == AUDIO_OUT)\r
-        {\r
-            if(deviceInfo->maxOutputChannels > 0)\r
-            {\r
-                idx = ctrl->InsertItem(j, ICON_TRANSPARENT);\r
-                defaultDisplayed = false;\r
-                if(devn == Pa_GetDefaultOutputDevice())\r
-                {\r
-                    buf.Printf("<<-");\r
-                    ctrl->SetItem(idx, 1, buf);\r
-                    defaultDisplayed = true;\r
-                }\r
-                else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultOutputDevice)\r
-                {\r
-                    buf.Printf("<--");\r
-                    ctrl->SetItem(idx, 1, buf);\r
-                    defaultDisplayed = true;\r
-                }\r
-                else\r
-                {\r
-                    buf.Printf("---");\r
-                    ctrl->SetItem(idx, 1, buf);\r
-                }\r
-                buf.Printf(wxT("%s"), deviceInfo->name);\r
-                ctrl->SetItem(idx, 2, buf);\r
-\r
-                buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name);\r
-                ctrl->SetItem(idx, 3, buf);\r
-\r
-                buf.Printf(wxT("%i"), deviceInfo->maxOutputChannels);\r
-                ctrl->SetItem(idx, 4, buf);\r
-\r
-                buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowOutputLatency);\r
-                ctrl->SetItem(idx, 5, buf);\r
-\r
-                buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighOutputLatency);\r
-                ctrl->SetItem(idx, 6, buf);\r
-            }\r
-        }\r
-        j++;\r
+//-------------------------------------------------------------------------
+// OnToolsAudioUI()
+//-------------------------------------------------------------------------
+void MainFrame::OnAudioOptsDialog(wxCommandEvent& event)\r
+{\r
+    int rv = 0;
+    AudioOptsDialog *dlg = new AudioOptsDialog(NULL);\r
+    rv = dlg->ShowModal();
+    if(rv == wxOK)
+    {
+//         dlg->ExchangeData(EXCHANGE_DATA_OUT);
     }\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// OnRxInDeviceSelect()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::OnRxInDeviceSelect(wxListEvent& event)\r
-{\r
-    wxString str;\r
-    int index = event.GetIndex();\r
-    wxString str2;\r
-\r
-    str2 = m_listCtrlRxInDevices->GetItemText(index, 2);\r
-    str.Printf("Name: %s", str2);\r
-    wxMessageBox(str, _("OnSelect"));\r
-    m_textCtrlRxIn->SetValue(str2);\r
-//    event.Skip();\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// OnRxOutDeviceSelect()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::OnRxOutDeviceSelect(wxListEvent& event)\r
-{\r
-    wxString str;\r
-    int index = event.GetIndex();\r
-    wxString str2;\r
-\r
-    str2 = m_listCtrlRxOutDevices->GetItemText(index, 2);\r
-    str.Printf("Name: %s", str2);\r
-    wxMessageBox(str, _("OnSelect"));\r
-    m_textCtrlRxOut->SetValue(str2);\r
-//    event.Skip();\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// OnTxInDeviceSelect()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::OnTxInDeviceSelect(wxListEvent& event)\r
-{\r
-    wxString str;\r
-    int index = event.GetIndex();\r
-    wxString str2;\r
-\r
-    str2 = m_listCtrlTxInDevices->GetItemText(index, 2);\r
-    str.Printf("Name: %s", str2);\r
-    wxMessageBox(str, _("OnSelect"));\r
-    m_textCtrlTxIn->SetValue(str2);\r
-//    event.Skip();\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// OnTxOutDeviceSelect()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::OnTxOutDeviceSelect(wxListEvent& event)\r
-{\r
-    wxString str;\r
-    int index = event.GetIndex();\r
-    wxString str2;\r
-\r
-    str2 = m_listCtrlTxOutDevices->GetItemText(index, 2);\r
-    str.Printf("Name: %s", str2);\r
-    wxMessageBox(str, _("OnSelect"));\r
-    m_textCtrlTxOut->SetValue(str2);\r
-//    event.Skip();\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// OnRefreshClick()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::OnRefreshClick(wxCommandEvent& event)\r
-{\r
-    m_notebook1->SetSelection(0);\r
-    showAPIInfo();\r
-    populateParams(m_RxInDevices);\r
-    populateParams(m_RxOutDevices);\r
-    populateParams(m_TxInDevices);\r
-    populateParams(m_TxOutDevices);\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// OnApplyAudioParameters()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::OnApplyAudioParameters(wxCommandEvent& event)\r
-{\r
-    Close();\r
-    event.Skip();\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// OnCancelAudioParameters()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::OnCancelAudioParameters(wxCommandEvent& event)\r
-{\r
-    Close();\r
-    //event.Skip();\r
-}\r
+    dlg->Destroy();;
+}
 \r
-//-------------------------------------------------------------------------\r
-// OnOkAudioParameters()\r
-//-------------------------------------------------------------------------\r
-void MainFrame::OnOkAudioParameters(wxCommandEvent& event)\r
-{\r
-    Close();\r
-    event.Skip();\r
-}\r
index 6820e9c32fae2d683ba74486d7194c2b9c5eb311..cecba295c518b91713b03fb09d734ab0427c8855 100644 (file)
 // main wxWidgets header file
 #include <wx/wx.h>
 #include <wx/textctrl.h>\r
-/*\r
-#if !defined(__WXMSW__) && !defined(__WXPM__)
-    #include "../bitmaps/sample.xpm"
-#endif
-
-#ifndef __WXMSW__
-    #include "bitmaps/toolbrai.xpm"
-    #include "bitmaps/toolchar.xpm"
-    #include "bitmaps/tooldata.xpm"
-    #include "bitmaps/toolnote.xpm"
-    #include "bitmaps/tooltodo.xpm"
-    #include "bitmaps/toolchec.xpm"
-    #include "bitmaps/toolgame.xpm"
-    #include "bitmaps/tooltime.xpm"
-    #include "bitmaps/toolword.xpm"
-    #include "bitmaps/small1.xpm"
-#endif
-*/\r
-\r
-#define AUDIO_IN      0\r
-#define AUDIO_OUT     1\r
+#include <wx/artprov.h>\r
+#include <wx/xrc/xmlres.h>\r
+#include <wx/intl.h>\r
+#include <wx/listctrl.h>\r
+#include <wx/menu.h>\r
+#include <wx/gdicmn.h>\r
+#include <wx/font.h>\r
+#include <wx/colour.h>\r
+#include <wx/settings.h>\r
+#include <wx/string.h>\r
+#include <wx/stattext.h>\r
+#include <wx/textctrl.h>\r
+#include <wx/combobox.h>\r
+#include <wx/sizer.h>\r
+#include <wx/statbox.h>\r
+#include <wx/panel.h>\r
+#include <wx/bitmap.h>\r
+#include <wx/image.h>\r
+#include <wx/icon.h>\r
+#include <wx/notebook.h>\r
+#include <wx/button.h>\r
+#include <wx/frame.h>\r
+#include <wx/dialog.h>\r
+#include "gui.h"\r
 \r
-#define ICON_TRANSPARENT    1\r
-#define ICON_CHECK          0\r
-#define ICON_toolchar       2\r
-#define ICON_tooldata       3\r
-#define ICON_toolgame       4\r
-#define ICON_toolnote       5\r
-#define ICON_TOOLTIME       6\r
-#define ICON_INARROW        7\r
-#define ICON_OUTARROW       8\r
-
-// gui classes generated by wxFormBuilder
-#include "gui.h"
-#include "portaudio.h"\r
-#ifdef WIN32
-#if PA_USE_ASIO
-#include "pa_asio.h"
-#endif
-#endif
-
-
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
 // application class declaration
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
@@ -66,18 +49,6 @@ class MainApp : public wxApp
     public:
         virtual bool OnInit();
 };
-
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
-// AudioInfoDisplay
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
-class AudioInfoDisplay
-{\r
-    public:\r
-        wxListCtrl*     m_listDevices;\r
-        int             direction;\r
-        wxTextCtrl*     m_textDevice;\r
-        wxComboBox*     m_cbSampleRate;\r
-};
 \r
 // declare global static function wxGetApp()
 DECLARE_APP(MainApp)
@@ -90,35 +61,12 @@ class MainFrame : public MainFrameBase
     public:
         MainFrame( wxWindow *parent );
         virtual ~MainFrame();
-        PaError         pa_err;
-        bool            m_isPaInitialized;\r
-        wxImageList     *m_imageListNormal;
-        wxImageList     *m_imageListSmall;
 
     protected:
         // protected event handlers
-        void OnCloseFrame( wxCloseEvent& event );
-        void OnDeviceSelect( wxListEvent& event );\r
-
-        void OnExitClick( wxCommandEvent& event );
-        void DisplaySupportedSampleRates(const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters);\r
-        void populateParams(AudioInfoDisplay);
-        void showAPIInfo();\r
-\r
-//        void OnActivateApp( wxActivateEvent& event ) { event.Skip(); }\r
-//        void OnCloseFrame( wxCloseEvent& event ) { event.Skip(); }\r
-        void OnRxInDeviceSelect(wxListEvent& event);\r
-        void OnRxOutDeviceSelect(wxListEvent& event);\r
-        void OnTxInDeviceSelect(wxListEvent& event);\r
-        void OnTxOutDeviceSelect(wxListEvent& event);\r
-        void OnRefreshClick(wxCommandEvent& event);\r
-        void OnApplyAudioParameters(wxCommandEvent& event);\r
-        void OnCancelAudioParameters(wxCommandEvent& event);\r
-        void OnOkAudioParameters(wxCommandEvent& event);\r
-        AudioInfoDisplay m_RxInDevices;\r
-        AudioInfoDisplay m_RxOutDevices;\r
-        AudioInfoDisplay m_TxInDevices;\r
-        AudioInfoDisplay m_TxOutDevices;\r
-};
+        virtual void OnCloseFrame( wxCloseEvent& event );
+        virtual void OnExitClick( wxCommandEvent& event );
+        void OnAudioOptsDialog( wxCommandEvent& event );\r
+};\r
 
 #endif //__main__
index ef78705b180e0264aacdce66a1ebfb625edbf433..25bbabb87fb86373ff48ebc88783797639ebc458 100644 (file)
@@ -13,7 +13,7 @@ CurrentFileName        :=
 CurrentFilePath        :=\r
 CurrentFileFullPath    :=\r
 User                   :=OFA-Staff\r
-Date                   :=10/25/2012\r
+Date                   :=10/26/2012\r
 CodeLitePath           :="C:\bin\CodeLite"\r
 LinkerName             :=g++\r
 SharedObjectLinkerName :=g++ -shared -fPIC\r
@@ -50,8 +50,8 @@ LibPath                := $(LibraryPathSwitch). $(LibraryPathSwitch)/bin/MinGW-4
 AR       := ar rcus\r
 CXX      := g++\r
 CC       := gcc\r
-CXXFLAGS :=  -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes)  -DSVN_REVISION=\"814\"  $(Preprocessors)\r
-CFLAGS   :=  -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes)  -DSVN_REVISION=\"814\"  $(Preprocessors)\r
+CXXFLAGS :=  -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes)  -DSVN_REVISION=\"824\"  $(Preprocessors)\r
+CFLAGS   :=  -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes)  -DSVN_REVISION=\"824\"  $(Preprocessors)\r
 \r
 \r
 ##\r
@@ -62,7 +62,7 @@ WXWIN:=C:\bin\wxWidgets-2.9.4
 PATH:=$(WXWIN)\lib\gcc_dll;$(PATH)\r
 WXCFG:=gcc_dll\mswu\r
 UNIT_TEST_PP_SRC_DIR:=C:\bin\UnitTest++-1.3\r
-Objects=$(IntermediateDirectory)/gui$(ObjectSuffix) $(IntermediateDirectory)/main$(ObjectSuffix) \r
+Objects=$(IntermediateDirectory)/gui$(ObjectSuffix) $(IntermediateDirectory)/main$(ObjectSuffix) $(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix) \r
 \r
 ##\r
 ## Main Build Targets \r
@@ -101,6 +101,14 @@ $(IntermediateDirectory)/main$(DependSuffix): main.cpp
 $(IntermediateDirectory)/main$(PreprocessSuffix): main.cpp\r
        @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/main$(PreprocessSuffix) "C:/bin/Projects/Radio/fdmdv2/tests/pa_enum/main.cpp"\r
 \r
+$(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix): AudioOptsDialog.cpp $(IntermediateDirectory)/AudioOptsDialog$(DependSuffix)\r
+       $(CXX) $(IncludePCH) $(SourceSwitch) "C:/bin/Projects/Radio/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix) $(IncludePath)\r
+$(IntermediateDirectory)/AudioOptsDialog$(DependSuffix): AudioOptsDialog.cpp\r
+       @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix) -MF$(IntermediateDirectory)/AudioOptsDialog$(DependSuffix) -MM "C:/bin/Projects/Radio/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp"\r
+\r
+$(IntermediateDirectory)/AudioOptsDialog$(PreprocessSuffix): AudioOptsDialog.cpp\r
+       @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/AudioOptsDialog$(PreprocessSuffix) "C:/bin/Projects/Radio/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp"\r
+\r
 \r
 -include $(IntermediateDirectory)/*$(DependSuffix)\r
 ##\r
@@ -113,6 +121,9 @@ clean:
        $(RM) $(IntermediateDirectory)/main$(ObjectSuffix)\r
        $(RM) $(IntermediateDirectory)/main$(DependSuffix)\r
        $(RM) $(IntermediateDirectory)/main$(PreprocessSuffix)\r
+       $(RM) $(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix)\r
+       $(RM) $(IntermediateDirectory)/AudioOptsDialog$(DependSuffix)\r
+       $(RM) $(IntermediateDirectory)/AudioOptsDialog$(PreprocessSuffix)\r
        $(RM) $(OutputFile)\r
        $(RM) $(OutputFile).exe\r
        $(RM) "C:\bin\Projects\Radio\fdmdv2\build\.build-debug\pa_enum"\r
index 5a1e49bc5064a5957419b532a74719287f11b8ae..f7e11fc16d5ea862b070598ade3b68917415acc5 100644 (file)
   <VirtualDirectory Name="src">
     <File Name="gui.cpp"/>
     <File Name="main.cpp"/>
+    <File Name="AudioOptsDialog.cpp"/>
   </VirtualDirectory>
   <VirtualDirectory Name="include">
     <File Name="gui.h"/>
     <File Name="main.h"/>
+    <File Name="AudioOptsDialog.h"/>
   </VirtualDirectory>
   <VirtualDirectory Name="resources">
     <File Name="gui.fbp"/>
index df3ff2994ae3d7929d4c6f09c21d5f3bc0d77f9b..b01c823d448d319ebc2664f547417b8a63ee2925 100644 (file)
@@ -1 +1 @@
-./Debug/gui.o ./Debug/main.o  \r
+./Debug/gui.o ./Debug/main.o ./Debug/AudioOptsDialog.o  \r