git-svn-id: https://svn.code.sf.net/p/freetel/code@938 01035d8c-6547-0410-b346-abe4f9...
authorwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 6 Nov 2012 14:18:21 +0000 (14:18 +0000)
committerwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 6 Nov 2012 14:18:21 +0000 (14:18 +0000)
fdmdv2/build/fdmdv2.mk
fdmdv2/build/fdmdv2.project
fdmdv2/build/fdmdv2.txt
fdmdv2/src/dlg_audiooptions.cpp [new file with mode: 0644]
fdmdv2/src/dlg_audiooptions.h [new file with mode: 0644]
fdmdv2/src/fdmdv2_main.cpp
fdmdv2/src/fdmdv2_main.h
fdmdv2/tests/pa_enum/AudioOptsDialog.cpp
fdmdv2/tests/pa_enum/pa_enum.mk

index 6bee61fe979835aafa3bd949731985222a7cad99..70ea17233a20f08905914e1fcf8e2a2b65fe0a0a 100644 (file)
@@ -13,7 +13,7 @@ CurrentFileName        :=
 CurrentFilePath        :=\r
 CurrentFileFullPath    :=\r
 User                   :=OFA-Staff\r
-Date                   :=11/5/2012\r
+Date                   :=11/6/2012\r
 CodeLitePath           :="C:\bin\CodeLite"\r
 LinkerName             :=g++\r
 SharedObjectLinkerName :=g++ -shared -fPIC\r
@@ -52,8 +52,8 @@ LibPath                := $(LibraryPathSwitch). $(LibraryPathSwitch)/bin/Project
 AR       := ar rcus\r
 CXX      := g++\r
 CC       := gcc\r
-CXXFLAGS :=  -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no)  -DSVN_REVISION=\"934\"  $(Preprocessors)\r
-CFLAGS   :=  -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no)  -DSVN_REVISION=\"934\"  $(Preprocessors)\r
+CXXFLAGS :=  -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no)  -DSVN_REVISION=\"936\"  $(Preprocessors)\r
+CFLAGS   :=  -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no)  -DSVN_REVISION=\"936\"  $(Preprocessors)\r
 \r
 \r
 ##\r
@@ -65,7 +65,7 @@ PATH:=$(WXWIN)\lib\gcc_dll;$(PATH)
 WXCFG:=gcc_dll\mswu\r
 UNIT_TEST_PP_SRC_DIR:=C:\bin\UnitTest++-1.3\r
 Objects=$(IntermediateDirectory)/src_dlg_about$(ObjectSuffix) $(IntermediateDirectory)/src_dlg_audio$(ObjectSuffix) $(IntermediateDirectory)/src_dlg_comports$(ObjectSuffix) $(IntermediateDirectory)/src_dlg_options$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_main$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_plot$(ObjectSuffix) $(IntermediateDirectory)/src_topFrame$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_plot_scatter$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_plot_spectrum$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_pa_wrapper$(ObjectSuffix) \\r
-       $(IntermediateDirectory)/src_fdmdv2_plot_scalar$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_hdw_ports$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(ObjectSuffix) \r
+       $(IntermediateDirectory)/src_fdmdv2_plot_scalar$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_hdw_ports$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(ObjectSuffix) $(IntermediateDirectory)/src_dlg_audiooptions$(ObjectSuffix) \r
 \r
 ##\r
 ## Main Build Targets \r
@@ -192,6 +192,14 @@ $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(DependSuffix): ../src/
 $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(PreprocessSuffix): ../src/fdmdv2_plot_waterfall_linux.cpp\r
        @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(PreprocessSuffix) "C:/bin/Projects/Radio/fdmdv2/src/fdmdv2_plot_waterfall_linux.cpp"\r
 \r
+$(IntermediateDirectory)/src_dlg_audiooptions$(ObjectSuffix): ../src/dlg_audiooptions.cpp $(IntermediateDirectory)/src_dlg_audiooptions$(DependSuffix)\r
+       $(CXX) $(IncludePCH) $(SourceSwitch) "C:/bin/Projects/Radio/fdmdv2/src/dlg_audiooptions.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/src_dlg_audiooptions$(ObjectSuffix) $(IncludePath)\r
+$(IntermediateDirectory)/src_dlg_audiooptions$(DependSuffix): ../src/dlg_audiooptions.cpp\r
+       @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/src_dlg_audiooptions$(ObjectSuffix) -MF$(IntermediateDirectory)/src_dlg_audiooptions$(DependSuffix) -MM "C:/bin/Projects/Radio/fdmdv2/src/dlg_audiooptions.cpp"\r
+\r
+$(IntermediateDirectory)/src_dlg_audiooptions$(PreprocessSuffix): ../src/dlg_audiooptions.cpp\r
+       @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_dlg_audiooptions$(PreprocessSuffix) "C:/bin/Projects/Radio/fdmdv2/src/dlg_audiooptions.cpp"\r
+\r
 \r
 -include $(IntermediateDirectory)/*$(DependSuffix)\r
 ##\r
@@ -237,6 +245,9 @@ clean:
        $(RM) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(ObjectSuffix)\r
        $(RM) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(DependSuffix)\r
        $(RM) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(PreprocessSuffix)\r
+       $(RM) $(IntermediateDirectory)/src_dlg_audiooptions$(ObjectSuffix)\r
+       $(RM) $(IntermediateDirectory)/src_dlg_audiooptions$(DependSuffix)\r
+       $(RM) $(IntermediateDirectory)/src_dlg_audiooptions$(PreprocessSuffix)\r
        $(RM) $(OutputFile)\r
        $(RM) $(OutputFile).exe\r
        $(RM) "C:\bin\Projects\Radio\fdmdv2\build\.build-release\fdmdv2"\r
index 5acbc7b16821241a3fd24e302fbdb0b163bb4658..445292ad903739adf29d5e5ffe794a7ebbe0c7b6 100644 (file)
@@ -21,6 +21,7 @@
     <File Name="../src/fdmdv2_plot_scalar.cpp"/>
     <File Name="../src/fdmdv2_hdw_ports.cpp"/>
     <File Name="../src/fdmdv2_plot_waterfall_linux.cpp"/>
+    <File Name="../src/dlg_audiooptions.cpp"/>
   </VirtualDirectory>
   <VirtualDirectory Name="include">
     <File Name="../src/dlg_about.h"/>
@@ -68,6 +69,7 @@
     <File Name="../../../Audio/portaudio/include/portaudio.h"/>
     <File Name="../../../Audio/libsndfile/include/sndfile.h"/>
     <File Name="../src/fdmdv2_plot_waterfall_linux.h"/>
+    <File Name="../src/dlg_audiooptions.h"/>
   </VirtualDirectory>
   <VirtualDirectory Name="resources">
     <File Name="../src/FDMDV2.fbp"/>
index 9dc601beca74fc10feef6727b39ad9c65ed00fa3..be9f68b83953b827dca9625b23c6b3ef5de0f9fa 100644 (file)
@@ -1 +1 @@
-./Release/src_dlg_about.o ./Release/src_dlg_audio.o ./Release/src_dlg_comports.o ./Release/src_dlg_options.o ./Release/src_fdmdv2_main.o ./Release/src_fdmdv2_plot.o ./Release/src_topFrame.o ./Release/src_fdmdv2_plot_scatter.o ./Release/src_fdmdv2_plot_spectrum.o ./Release/src_fdmdv2_pa_wrapper.o  ./Release/src_fdmdv2_plot_scalar.o ./Release/src_fdmdv2_hdw_ports.o ./Release/src_fdmdv2_plot_waterfall_linux.o  \r
+./Release/src_dlg_about.o ./Release/src_dlg_audio.o ./Release/src_dlg_comports.o ./Release/src_dlg_options.o ./Release/src_fdmdv2_main.o ./Release/src_fdmdv2_plot.o ./Release/src_topFrame.o ./Release/src_fdmdv2_plot_scatter.o ./Release/src_fdmdv2_plot_spectrum.o ./Release/src_fdmdv2_pa_wrapper.o  ./Release/src_fdmdv2_plot_scalar.o ./Release/src_fdmdv2_hdw_ports.o ./Release/src_fdmdv2_plot_waterfall_linux.o ./Release/src_dlg_audiooptions.o  \r
diff --git a/fdmdv2/src/dlg_audiooptions.cpp b/fdmdv2/src/dlg_audiooptions.cpp
new file mode 100644 (file)
index 0000000..c90ac40
--- /dev/null
@@ -0,0 +1,726 @@
+//=========================================================================\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 "fdmdv2_main.h"\r
+#include "dlg_audiooptions.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_textCtrlRxIn->SetValue(wxGetApp().m_strRxInAudio);
+        m_textCtrlRxOut->SetValue(wxGetApp().m_strRxOutAudio);
+        m_textCtrlTxIn->SetValue(wxGetApp().m_textVoiceInput);
+        m_textCtrlTxOut->SetValue(wxGetApp().m_textVoiceOutput);
+    }
+    if(inout == EXCHANGE_DATA_OUT)
+    {
+        wxGetApp().m_strRxInAudio    = m_textCtrlRxIn->GetValue();
+        wxGetApp().m_strRxOutAudio   = m_textCtrlRxOut->GetValue();
+        wxGetApp().m_textVoiceInput  = m_textCtrlTxIn->GetValue();
+        wxGetApp().m_textVoiceOutput = m_textCtrlTxOut->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
+            str.Printf("%8.2f", standardSampleRates[i]);\r
+            ai.m_cbSampleRate->AppendString(str);\r
+        }\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
+    ExchangeData(EXCHANGE_DATA_OUT);
+    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
+    ExchangeData(EXCHANGE_DATA_OUT);
+    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/src/dlg_audiooptions.h b/fdmdv2/src/dlg_audiooptions.h
new file mode 100644 (file)
index 0000000..0a08e85
--- /dev/null
@@ -0,0 +1,145 @@
+//=========================================================================\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 "fdmdv2_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"\r
+
+#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 122bc899cebb419e6d07f2b71ff1d3b0798d3fc0..eb22243bdbd7e98d636fdac29607b5ffa2c111dd 100644 (file)
@@ -790,7 +790,7 @@ void MainFrame::OnToolsAudio(wxCommandEvent& event)
 {
     wxUnusedVar(event);
     int rv = 0;
-    AudioDlg *dlg = new AudioDlg(NULL);
+    AudioOptsDialog *dlg = new AudioOptsDialog(NULL);
     rv = dlg->ShowModal();
     if(rv == wxID_OK)
     {
index 2a185a9dab56e54b771d70729e852a93af928c34..b741fcd3b9ae3db800f28dc7e0f7565dcfa840f0 100644 (file)
@@ -36,7 +36,7 @@
 
 #include "topFrame.h"
 #include "dlg_about.h"
-#include "dlg_audio.h"
+#include "dlg_audiooptions.h"
 #include "dlg_options.h"
 #include "dlg_comports.h"
 #include "fdmdv2_plot.h"
index 4b269eb34c787c768181b3c0c773ab5d81020d04..68d46ffbe8f36bdf219f004ca55cc089edde4533 100644 (file)
@@ -375,16 +375,23 @@ void AudioOptsDialog::DisplaySupportedSampleRates(AudioInfoDisplay ai)
         192000.0,   -1          // negative terminated  list\r
     };\r
     int i;\r
-    int printCount;\r
-    PaError err;\r
+    //int printCount;\r
+    //PaError err;\r
     wxString str;\r
 \r
-    printCount = 0;\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
+            str.Printf("%8.2f", standardSampleRates[i]);\r
+            ai.m_cbSampleRate->AppendString(str);\r
+        }\r
+\r
         err = Pa_IsFormatSupported(ai->inputParameters, outputParameters, standardSampleRates[i]);\r
         if(err == paFormatIsSupported)\r
         {\r
@@ -663,7 +670,7 @@ void AudioOptsDialog::OnRefreshClick(wxCommandEvent& event)
 //-------------------------------------------------------------------------\r
 // OnApplyAudioParameters()\r
 //-------------------------------------------------------------------------\r
- void AudioOptsDialog::OnApplyAudioParameters(wxCommandEvent& event)\r
+void AudioOptsDialog::OnApplyAudioParameters(wxCommandEvent& event)\r
 {\r
     ExchangeData(EXCHANGE_DATA_OUT);
     if(m_isPaInitialized)\r
@@ -676,6 +683,7 @@ void AudioOptsDialog::OnRefreshClick(wxCommandEvent& event)
         {\r
             wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK);\r
         }\r
+    }\r
 }\r
 \r
 //-------------------------------------------------------------------------\r
index 630a8eb3519d7ec4bb2ce610003682f41b3f991c..850cc8c05afa032eb610e9d7ea10d34f8ef4381d 100644 (file)
@@ -13,7 +13,7 @@ CurrentFileName        :=
 CurrentFilePath        :=\r
 CurrentFileFullPath    :=\r
 User                   :=OFA-Staff\r
-Date                   :=11/1/2012\r
+Date                   :=11/5/2012\r
 CodeLitePath           :="C:\bin\CodeLite"\r
 LinkerName             :=g++\r
 SharedObjectLinkerName :=g++ -shared -fPIC\r
@@ -35,6 +35,8 @@ PreprocessOnlySwitch   :=-E
 ObjectsFileList        :="C:\bin\Projects\Radio\fdmdv2\tests\pa_enum\pa_enum.txt"\r
 PCHCompileFlags        :=\r
 MakeDirCommand         :=makedir\r
+RcCmpOptions           := $(shell wx-config --rcflags)\r
+RcCompilerName         :=windres\r
 LinkOptions            :=  -mwindows -s $(shell wx-config --debug=no --libs --unicode=yes)\r
 IncludePath            :=  $(IncludeSwitch). $(IncludeSwitch)/bin/MinGW-4.6.1/msys/1.0/local/include $(IncludeSwitch)../../codec2-dev/src $(IncludeSwitch)/bin/Projects/Audio/libsndfile/ \r
 IncludePCH             := \r
@@ -50,8 +52,8 @@ LibPath                := $(LibraryPathSwitch). $(LibraryPathSwitch)/bin/MinGW-4
 AR       := ar rcus\r
 CXX      := g++\r
 CC       := gcc\r
-CXXFLAGS :=  -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no)  -DSVN_REVISION=\"914\"  $(Preprocessors)\r
-CFLAGS   :=  -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no)  -DSVN_REVISION=\"914\"  $(Preprocessors)\r
+CXXFLAGS :=  -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no)  -DSVN_REVISION=\"936\"  $(Preprocessors)\r
+CFLAGS   :=  -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no)  -DSVN_REVISION=\"936\"  $(Preprocessors)\r
 \r
 \r
 ##\r