From: wittend99 Date: Tue, 6 Nov 2012 14:18:21 +0000 (+0000) Subject: git-svn-id: https://svn.code.sf.net/p/freetel/code@938 01035d8c-6547-0410-b346-abe4f9... X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=699d61343cd7eef657f0efadc39694cc41773951;p=freetel-svn-tracking.git git-svn-id: https://svn.code.sf.net/p/freetel/code@938 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/fdmdv2/build/fdmdv2.mk b/fdmdv2/build/fdmdv2.mk index 6bee61fe..70ea1723 100644 --- a/fdmdv2/build/fdmdv2.mk +++ b/fdmdv2/build/fdmdv2.mk @@ -13,7 +13,7 @@ CurrentFileName := CurrentFilePath := CurrentFileFullPath := User :=OFA-Staff -Date :=11/5/2012 +Date :=11/6/2012 CodeLitePath :="C:\bin\CodeLite" LinkerName :=g++ SharedObjectLinkerName :=g++ -shared -fPIC @@ -52,8 +52,8 @@ LibPath := $(LibraryPathSwitch). $(LibraryPathSwitch)/bin/Project AR := ar rcus CXX := g++ CC := gcc -CXXFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"934\" $(Preprocessors) -CFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"934\" $(Preprocessors) +CXXFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"936\" $(Preprocessors) +CFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"936\" $(Preprocessors) ## @@ -65,7 +65,7 @@ PATH:=$(WXWIN)\lib\gcc_dll;$(PATH) WXCFG:=gcc_dll\mswu UNIT_TEST_PP_SRC_DIR:=C:\bin\UnitTest++-1.3 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) \ - $(IntermediateDirectory)/src_fdmdv2_plot_scalar$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_hdw_ports$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(ObjectSuffix) + $(IntermediateDirectory)/src_fdmdv2_plot_scalar$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_hdw_ports$(ObjectSuffix) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(ObjectSuffix) $(IntermediateDirectory)/src_dlg_audiooptions$(ObjectSuffix) ## ## Main Build Targets @@ -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 @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(PreprocessSuffix) "C:/bin/Projects/Radio/fdmdv2/src/fdmdv2_plot_waterfall_linux.cpp" +$(IntermediateDirectory)/src_dlg_audiooptions$(ObjectSuffix): ../src/dlg_audiooptions.cpp $(IntermediateDirectory)/src_dlg_audiooptions$(DependSuffix) + $(CXX) $(IncludePCH) $(SourceSwitch) "C:/bin/Projects/Radio/fdmdv2/src/dlg_audiooptions.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/src_dlg_audiooptions$(ObjectSuffix) $(IncludePath) +$(IntermediateDirectory)/src_dlg_audiooptions$(DependSuffix): ../src/dlg_audiooptions.cpp + @$(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" + +$(IntermediateDirectory)/src_dlg_audiooptions$(PreprocessSuffix): ../src/dlg_audiooptions.cpp + @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_dlg_audiooptions$(PreprocessSuffix) "C:/bin/Projects/Radio/fdmdv2/src/dlg_audiooptions.cpp" + -include $(IntermediateDirectory)/*$(DependSuffix) ## @@ -237,6 +245,9 @@ clean: $(RM) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(ObjectSuffix) $(RM) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(DependSuffix) $(RM) $(IntermediateDirectory)/src_fdmdv2_plot_waterfall_linux$(PreprocessSuffix) + $(RM) $(IntermediateDirectory)/src_dlg_audiooptions$(ObjectSuffix) + $(RM) $(IntermediateDirectory)/src_dlg_audiooptions$(DependSuffix) + $(RM) $(IntermediateDirectory)/src_dlg_audiooptions$(PreprocessSuffix) $(RM) $(OutputFile) $(RM) $(OutputFile).exe $(RM) "C:\bin\Projects\Radio\fdmdv2\build\.build-release\fdmdv2" diff --git a/fdmdv2/build/fdmdv2.project b/fdmdv2/build/fdmdv2.project index 5acbc7b1..445292ad 100644 --- a/fdmdv2/build/fdmdv2.project +++ b/fdmdv2/build/fdmdv2.project @@ -21,6 +21,7 @@ + @@ -68,6 +69,7 @@ + diff --git a/fdmdv2/build/fdmdv2.txt b/fdmdv2/build/fdmdv2.txt index 9dc601be..be9f68b8 100644 --- a/fdmdv2/build/fdmdv2.txt +++ b/fdmdv2/build/fdmdv2.txt @@ -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 +./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 diff --git a/fdmdv2/src/dlg_audiooptions.cpp b/fdmdv2/src/dlg_audiooptions.cpp new file mode 100644 index 00000000..c90ac404 --- /dev/null +++ b/fdmdv2/src/dlg_audiooptions.cpp @@ -0,0 +1,726 @@ +//========================================================================= +// Name: AudioOptsDialog.cpp +// Purpose: Implements 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 implemented in +// gui.cpp source file which is generated by wxFormBuilder. +//========================================================================= +#include "fdmdv2_main.h" +#include "dlg_audiooptions.h" + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// AudioOptsDialog() +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +AudioOptsDialog::AudioOptsDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style) +{ + this->SetSizeHints(wxSize(650, 400), wxDefaultSize); + + m_isPaInitialized = false; + + // Make an image list containing large icons + m_imageListNormal = new wxImageList(32, 32, true); + m_imageListSmall = new wxImageList(16, 16, true); + +#ifdef __WXMSW__ + // Give it an icon + SetIcon(wxICON("bitmaps/sample.ico")); + + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchec.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.ico"), wxBITMAP_TYPE_ICO)); +#else + // Give it an icon + SetIcon(wxICON("bitmaps/sample.xpm")); + + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchec.xpm"), wxBITMAP_TYPE_XPM, -1, -1)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.xpm"), wxBITMAP_TYPE_XPM, -1, -1)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.xpm"), wxBITMAP_TYPE_XPM, -1, -1)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.xpm"), wxBITMAP_TYPE_XPM, -1, -1)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.xpm"), wxBITMAP_TYPE_XPM, -1, -1)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.xpm"), wxBITMAP_TYPE_XPM, -1, -1)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.xpm"), wxBITMAP_TYPE_XPM, -1, -1)); +// m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.xpm"), wxBITMAP_TYPE_XPM)); +// m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.xpm"), wxBITMAP_TYPE_XPM)); + #endif + if(!m_isPaInitialized) + { + if((pa_err = Pa_Initialize()) == paNoError) + { + m_isPaInitialized = true; + } + else + { + wxMessageBox(wxT("Port Audio failed to initialize"), wxT("Pa_Initialize"), wxOK); + return; + } + } + + wxBoxSizer* mainSizer; + mainSizer = new wxBoxSizer(wxVERTICAL); + m_panel1 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + wxBoxSizer* bSizer4; + bSizer4 = new wxBoxSizer(wxVERTICAL); + m_notebook1 = new wxNotebook(m_panel1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_BOTTOM); + m_panelRx = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + wxBoxSizer* bSizer20; + bSizer20 = new wxBoxSizer(wxVERTICAL); + wxGridSizer* gSizer4; + gSizer4 = new wxGridSizer(2, 1, 0, 0); + wxStaticBoxSizer* sbSizer2; + sbSizer2 = new wxStaticBoxSizer(new wxStaticBox(m_panelRx, wxID_ANY, _("Rx Radio Device")), wxVERTICAL); + m_listCtrlRxInDevices = new wxListCtrl(m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES); + sbSizer2->Add(m_listCtrlRxInDevices, 1, wxALL|wxEXPAND, 1); + wxBoxSizer* bSizer811; + bSizer811 = new wxBoxSizer(wxHORIZONTAL); + m_staticText51 = new wxStaticText(m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText51->Wrap(-1); + bSizer811->Add(m_staticText51, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5); + m_textCtrlRxIn = new wxTextCtrl(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + bSizer811->Add(m_textCtrlRxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1); + m_staticText6 = new wxStaticText(m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText6->Wrap(-1); + bSizer811->Add(m_staticText6, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5); + m_cbSampleRateRxIn = new wxComboBox(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN); + bSizer811->Add(m_cbSampleRateRxIn, 0, wxALL, 1); + sbSizer2->Add(bSizer811, 0, wxEXPAND, 5); + gSizer4->Add(sbSizer2, 1, wxEXPAND, 5); + wxStaticBoxSizer* sbSizer3; + sbSizer3 = new wxStaticBoxSizer(new wxStaticBox(m_panelRx, wxID_ANY, _("Rx Speaker Stream")), wxVERTICAL); + m_listCtrlRxOutDevices = new wxListCtrl(m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES); + sbSizer3->Add(m_listCtrlRxOutDevices, 1, wxALL|wxEXPAND, 1); + wxBoxSizer* bSizer81; + bSizer81 = new wxBoxSizer(wxHORIZONTAL); + m_staticText9 = new wxStaticText(m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText9->Wrap(-1); + bSizer81->Add(m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + m_textCtrlRxOut = new wxTextCtrl(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + bSizer81->Add(m_textCtrlRxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1); + m_staticText10 = new wxStaticText(m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText10->Wrap(-1); + bSizer81->Add(m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5); + m_cbSampleRateRxOut = new wxComboBox(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN); + bSizer81->Add(m_cbSampleRateRxOut, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1); + sbSizer3->Add(bSizer81, 0, wxEXPAND, 2); + gSizer4->Add(sbSizer3, 1, wxEXPAND, 2); + bSizer20->Add(gSizer4, 1, wxEXPAND, 1); + m_panelRx->SetSizer(bSizer20); + m_panelRx->Layout(); + bSizer20->Fit(m_panelRx); + m_notebook1->AddPage(m_panelRx, _("Receive"), true); + m_panelTx = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + wxBoxSizer* bSizer18; + bSizer18 = new wxBoxSizer(wxVERTICAL); + wxGridSizer* gSizer2; + gSizer2 = new wxGridSizer(2, 1, 0, 0); + wxStaticBoxSizer* sbSizer22; + sbSizer22 = new wxStaticBoxSizer(new wxStaticBox(m_panelTx, wxID_ANY, _("Tx Microphone Stream")), wxVERTICAL); + m_listCtrlTxInDevices = new wxListCtrl(m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES); + sbSizer22->Add(m_listCtrlTxInDevices, 1, wxALL|wxEXPAND, 1); + wxBoxSizer* bSizer83; + bSizer83 = new wxBoxSizer(wxHORIZONTAL); + m_staticText12 = new wxStaticText(m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText12->Wrap(-1); + bSizer83->Add(m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5); + m_textCtrlTxIn = new wxTextCtrl(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + bSizer83->Add(m_textCtrlTxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1); + m_staticText11 = new wxStaticText(m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText11->Wrap(-1); + bSizer83->Add(m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5); + m_cbSampleRateTxIn = new wxComboBox(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN); + bSizer83->Add(m_cbSampleRateTxIn, 0, wxALL, 1); + sbSizer22->Add(bSizer83, 0, wxEXPAND, 2); + gSizer2->Add(sbSizer22, 1, wxEXPAND, 5); + wxStaticBoxSizer* sbSizer21; + sbSizer21 = new wxStaticBoxSizer(new wxStaticBox(m_panelTx, wxID_ANY, _("Tx Radio Stream")), wxVERTICAL); + m_listCtrlTxOutDevices = new wxListCtrl(m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES); + sbSizer21->Add(m_listCtrlTxOutDevices, 1, wxALL|wxEXPAND, 2); + wxBoxSizer* bSizer82; + bSizer82 = new wxBoxSizer(wxHORIZONTAL); + m_staticText81 = new wxStaticText(m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText81->Wrap(-1); + bSizer82->Add(m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + m_textCtrlTxOut = new wxTextCtrl(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + bSizer82->Add(m_textCtrlTxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1); + m_staticText71 = new wxStaticText(m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText71->Wrap(-1); + bSizer82->Add(m_staticText71, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5); + m_cbSampleRateTxOut = new wxComboBox(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN); + bSizer82->Add(m_cbSampleRateTxOut, 0, wxALL, 1); + sbSizer21->Add(bSizer82, 0, wxEXPAND, 2); + gSizer2->Add(sbSizer21, 1, wxEXPAND, 5); + bSizer18->Add(gSizer2, 1, wxEXPAND, 1); + m_panelTx->SetSizer(bSizer18); + m_panelTx->Layout(); + bSizer18->Fit(m_panelTx); + m_notebook1->AddPage(m_panelTx, _("Transmit"), false); + m_panelAPI = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + wxBoxSizer* bSizer12; + bSizer12 = new wxBoxSizer(wxHORIZONTAL); + wxGridSizer* gSizer31; + gSizer31 = new wxGridSizer(2, 1, 0, 0); + wxStaticBoxSizer* sbSizer1; + sbSizer1 = new wxStaticBoxSizer(new wxStaticBox(m_panelAPI, wxID_ANY, _("PortAudio")), wxVERTICAL); + wxGridSizer* gSizer3; + gSizer3 = new wxGridSizer(4, 2, 0, 0); + m_staticText7 = new wxStaticText(m_panelAPI, wxID_ANY, _("PortAudio Version String:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText7->Wrap(-1); + gSizer3->Add(m_staticText7, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1); + wxBoxSizer* bSizer151; + bSizer151 = new wxBoxSizer(wxVERTICAL); + m_textStringVer = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY); + bSizer151->Add(m_textStringVer, 0, wxALL|wxEXPAND, 1); + gSizer3->Add(bSizer151, 1, wxEXPAND, 2); + m_staticText8 = new wxStaticText(m_panelAPI, wxID_ANY, _("PortAudio Int Version:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText8->Wrap(-1); + gSizer3->Add(m_staticText8, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1); + wxBoxSizer* bSizer13; + bSizer13 = new wxBoxSizer(wxVERTICAL); + m_textIntVer = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY); + bSizer13->Add(m_textIntVer, 0, wxALL|wxALIGN_CENTER_VERTICAL, 1); + gSizer3->Add(bSizer13, 1, wxEXPAND, 5); + m_staticText5 = new wxStaticText(m_panelAPI, wxID_ANY, _("Device Count:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText5->Wrap(-1); + gSizer3->Add(m_staticText5, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1); + wxBoxSizer* bSizer14; + bSizer14 = new wxBoxSizer(wxVERTICAL); + m_textCDevCount = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(45,-1), wxTE_READONLY); + m_textCDevCount->SetMaxSize(wxSize(45,-1)); + bSizer14->Add(m_textCDevCount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1); + gSizer3->Add(bSizer14, 1, wxEXPAND, 5); + m_staticText4 = new wxStaticText(m_panelAPI, wxID_ANY, _("API Count:"), wxDefaultPosition, wxDefaultSize, 0); + m_staticText4->Wrap(-1); + gSizer3->Add(m_staticText4, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1); + wxBoxSizer* bSizer15; + bSizer15 = new wxBoxSizer(wxVERTICAL); + m_textAPICount = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(45,-1), wxTE_READONLY); + m_textAPICount->SetMaxSize(wxSize(45,-1)); + bSizer15->Add(m_textAPICount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1); + gSizer3->Add(bSizer15, 1, wxEXPAND, 5); + sbSizer1->Add(gSizer3, 1, wxEXPAND, 2); + gSizer31->Add(sbSizer1, 1, wxEXPAND, 2); + wxStaticBoxSizer* sbSizer6; + sbSizer6 = new wxStaticBoxSizer(new wxStaticBox(m_panelAPI, wxID_ANY, _("Other")), wxVERTICAL); + gSizer31->Add(sbSizer6, 1, wxEXPAND, 5); + bSizer12->Add(gSizer31, 1, wxEXPAND, 5); + m_panelAPI->SetSizer(bSizer12); + m_panelAPI->Layout(); + bSizer12->Fit(m_panelAPI); + m_notebook1->AddPage(m_panelAPI, _("API Info"), false); + bSizer4->Add(m_notebook1, 1, wxEXPAND | wxALL, 0); + m_panel1->SetSizer(bSizer4); + m_panel1->Layout(); + bSizer4->Fit(m_panel1); + mainSizer->Add(m_panel1, 1, wxEXPAND | wxALL, 1); + wxBoxSizer* bSizer6; + bSizer6 = new wxBoxSizer(wxHORIZONTAL); + m_btnRefresh = new wxButton(this, wxID_ANY, _("Refresh"), wxDefaultPosition, wxDefaultSize, 0); + bSizer6->Add(m_btnRefresh, 0, wxALIGN_CENTER|wxALL, 2); + m_sdbSizer1 = new wxStdDialogButtonSizer(); + m_sdbSizer1OK = new wxButton(this, wxID_OK); + m_sdbSizer1->AddButton(m_sdbSizer1OK); + m_sdbSizer1Apply = new wxButton(this, wxID_APPLY); + m_sdbSizer1->AddButton(m_sdbSizer1Apply); + m_sdbSizer1Cancel = new wxButton(this, wxID_CANCEL); + m_sdbSizer1->AddButton(m_sdbSizer1Cancel); + m_sdbSizer1->Realize(); + bSizer6->Add(m_sdbSizer1, 1, wxALIGN_CENTER_VERTICAL, 2); + mainSizer->Add(bSizer6, 0, wxEXPAND, 2); + this->SetSizer(mainSizer); + this->Layout(); + this->Centre(wxBOTH); +// this->Centre(wxBOTH); + + m_notebook1->SetSelection(0); + + showAPIInfo(); + m_RxInDevices.m_listDevices = m_listCtrlRxInDevices; + m_RxInDevices.direction = AUDIO_IN; + m_RxInDevices.m_textDevice = m_textCtrlRxIn; + m_RxInDevices.m_cbSampleRate = m_cbSampleRateRxIn; + + m_RxOutDevices.m_listDevices = m_listCtrlRxOutDevices; + m_RxOutDevices.direction = AUDIO_OUT; + m_RxOutDevices.m_textDevice = m_textCtrlRxOut; + m_RxOutDevices.m_cbSampleRate = m_cbSampleRateRxOut; + + m_TxInDevices.m_listDevices = m_listCtrlTxInDevices; + m_TxInDevices.direction = AUDIO_IN; + m_TxInDevices.m_textDevice = m_textCtrlTxIn; + m_TxInDevices.m_cbSampleRate = m_cbSampleRateTxIn; + + m_TxOutDevices.m_listDevices = m_listCtrlTxOutDevices; + m_TxOutDevices.direction = AUDIO_OUT; + m_TxOutDevices.m_textDevice = m_textCtrlTxOut; + m_TxOutDevices.m_cbSampleRate = m_cbSampleRateTxOut; + + populateParams(m_RxInDevices); + populateParams(m_RxOutDevices); + populateParams(m_TxInDevices); + populateParams(m_TxOutDevices); + + m_listCtrlRxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxInDeviceSelect ), NULL, this ); + m_listCtrlRxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxOutDeviceSelect ), NULL, this ); + m_listCtrlTxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxInDeviceSelect ), NULL, this ); + m_listCtrlTxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxOutDeviceSelect ), NULL, this ); + m_btnRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnRefreshClick ), NULL, this ); + m_sdbSizer1Apply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnApplyAudioParameters ), NULL, this ); + m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnCancelAudioParameters ), NULL, this ); + m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnOkAudioParameters ), NULL, this ); +/* + void OnClose( wxCloseEvent& event ) { event.Skip(); } + void OnHibernate( wxActivateEvent& event ) { event.Skip(); } + void OnIconize( wxIconizeEvent& event ) { event.Skip(); } + void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); } +*/ +// this->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(AudioOptsDialog::OnClose)); + this->Connect(wxEVT_HIBERNATE, wxActivateEventHandler(AudioOptsDialog::OnHibernate)); + this->Connect(wxEVT_ICONIZE, wxIconizeEventHandler(AudioOptsDialog::OnIconize)); + this->Connect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(AudioOptsDialog::OnInitDialog)); +} + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// ~AudioOptsDialog() +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +AudioOptsDialog::~AudioOptsDialog() +{ + // Disconnect Events + this->Disconnect(wxEVT_HIBERNATE, wxActivateEventHandler(AudioOptsDialog::OnHibernate)); + this->Disconnect(wxEVT_ICONIZE, wxIconizeEventHandler(AudioOptsDialog::OnIconize)); + this->Disconnect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(AudioOptsDialog::OnInitDialog)); + + m_listCtrlRxInDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnRxInDeviceSelect), NULL, this); + m_listCtrlRxOutDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnRxOutDeviceSelect), NULL, this); + m_listCtrlTxInDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnTxInDeviceSelect), NULL, this); + m_listCtrlTxOutDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnTxOutDeviceSelect), NULL, this); + m_btnRefresh->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnRefreshClick), NULL, this); + m_sdbSizer1Apply->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnApplyAudioParameters), NULL, this); + m_sdbSizer1Cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnCancelAudioParameters), NULL, this); + m_sdbSizer1OK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnOkAudioParameters), NULL, this); +} + +//------------------------------------------------------------------------- +// 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); +} + +//------------------------------------------------------------------------- +// OnDeviceSelect() +//------------------------------------------------------------------------- +void AudioOptsDialog::OnDeviceSelect(wxListEvent& event) +{ + wxListItem info; + long item; + item = m_listCtrlRxInDevices->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + wxMessageBox(m_listCtrlRxInDevices->GetItemText(item, 2), wxT("Item"), wxOK); +} + +//------------------------------------------------------------------------- +// DisplaySupportedSampleRates() +//------------------------------------------------------------------------- +void AudioOptsDialog::DisplaySupportedSampleRates(AudioInfoDisplay ai) +{ + static double standardSampleRates[] = + { + 8000.0, 9600.0, + 11025.0, 12000.0, + 16000.0, 22050.0, + 24000.0, 32000.0, + 44100.0, 48000.0, + 88200.0, 96000.0, + 192000.0, -1 // negative terminated list + }; + int i; + //int printCount; + //PaError err; + wxString str; + + //printCount = 0; + for(i = 0; standardSampleRates[i] > 0; i++) + { + str.Printf("%8.2f", standardSampleRates[i]); + ai.m_cbSampleRate->AppendString(str); +/* + err = Pa_IsFormatSupported(ai.inputParameters, outputParameters, standardSampleRates[i]); + if(err == paFormatIsSupported) + { + str.Printf("%8.2f", standardSampleRates[i]); + ai.m_cbSampleRate->AppendString(str); + } + + err = Pa_IsFormatSupported(ai->inputParameters, outputParameters, standardSampleRates[i]); + if(err == paFormatIsSupported) + { + if(printCount == 0) + { + printf("\t%8.2f", standardSampleRates[i]); + printCount = 1; + } + else if(printCount == 4) + { + printf(",\n\t%8.2f", standardSampleRates[i]); + printCount = 1; + } + else + { + printf(", %8.2f", standardSampleRates[i]); + ++printCount; + } + } +*/ + } + ai.m_cbSampleRate->SetSelection(9); +} + +//------------------------------------------------------------------------- +// GetAPIInfo() +//------------------------------------------------------------------------- +void AudioOptsDialog::showAPIInfo() +{ + wxString strval; + int apiCount = 0; + int numDevices = 0; + + strval = Pa_GetVersionText(); + m_textStringVer->SetValue(strval); + + numDevices = Pa_GetVersion(); + strval.Printf(wxT("%d"), numDevices); + m_textIntVer->SetValue(strval); + + apiCount = Pa_GetHostApiCount(); + strval.Printf(wxT("%d"), apiCount); + m_textAPICount->SetValue(strval); + + numDevices = Pa_GetDeviceCount(); + strval.Printf(wxT("%d"), numDevices); + m_textCDevCount->SetValue(strval); +} + +//------------------------------------------------------------------------- +// populateParams() +//------------------------------------------------------------------------- +void AudioOptsDialog::populateParams(AudioInfoDisplay ai) +{ + const PaDeviceInfo *deviceInfo = NULL; + int j = 0; + wxListCtrl* ctrl = ai.m_listDevices; + int in_out = ai.direction; + long idx; + bool defaultDisplayed = false; + int numDevices; + wxListItem listItem; + wxString buf; + int devn; + + numDevices = Pa_GetDeviceCount(); + + if(ctrl->GetColumnCount() > 0) + { + ctrl->ClearAll(); + } + //ctrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL); + + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("Sel")); + idx = ctrl->InsertColumn(0, listItem); + ctrl->SetColumnWidth(0, 37); + + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("Dflt")); + idx = ctrl->InsertColumn(1, listItem); + ctrl->SetColumnWidth(1, 37); + + listItem.SetAlign(wxLIST_FORMAT_LEFT); + listItem.SetText(wxT("Device")); + idx = ctrl->InsertColumn(2, listItem); + ctrl->SetColumnWidth(2, 190); + + listItem.SetAlign(wxLIST_FORMAT_LEFT); + listItem.SetText(wxT("API")); + idx = ctrl->InsertColumn(3, listItem); + ctrl->SetColumnWidth(3, 190); + + if(in_out == AUDIO_IN) + { + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("# Inputs")); + idx = ctrl->InsertColumn(4, listItem); + ctrl->SetColumnWidth(4, 75); + } + else if(in_out == AUDIO_OUT) + { + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("# Outputs")); + idx = ctrl->InsertColumn(4, listItem); + ctrl->SetColumnWidth(4, 75); + } + + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("Min Latency")); + ctrl->InsertColumn(5, listItem); + ctrl->SetColumnWidth(5, 100); + + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("Max Latency")); + ctrl->InsertColumn(6, listItem); + ctrl->SetColumnWidth(6, 100); + + for(devn = 0; devn < numDevices; devn++) + { + buf.Printf(wxT("")); + deviceInfo = Pa_GetDeviceInfo(devn); + if(in_out == AUDIO_IN) + { + if(deviceInfo->maxInputChannels > 0) + { + idx = ctrl->InsertItem(j, ICON_TRANSPARENT); + defaultDisplayed = false; + if(devn == Pa_GetDefaultInputDevice()) + { + buf.Printf("->>"); + ctrl->SetItem(idx, 1, buf); + defaultDisplayed = true; + } + else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultInputDevice) + { + buf.Printf("-->"); + ctrl->SetItem(idx, 1, buf); + defaultDisplayed = true; + } + else + { + buf.Printf("---"); + ctrl->SetItem(idx, 1, buf); + defaultDisplayed = false; + } + buf.Printf(wxT("%s"), deviceInfo->name); + ctrl->SetItem(idx, 2, buf); + if(defaultDisplayed) + { + ai.m_textDevice->SetValue(buf); + } + + buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name); + ctrl->SetItem(idx, 3, buf); + + buf.Printf(wxT("%i"), deviceInfo->maxInputChannels); + ctrl->SetItem(idx, 4, buf); + + buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowInputLatency); + ctrl->SetItem(idx, 5, buf); + + buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighInputLatency); + ctrl->SetItem(idx, 6, buf); + } + } + else if(in_out == AUDIO_OUT) + { + if(deviceInfo->maxOutputChannels > 0) + { + idx = ctrl->InsertItem(j, ICON_TRANSPARENT); + defaultDisplayed = false; + if(devn == Pa_GetDefaultOutputDevice()) + { + buf.Printf("<<-"); + ctrl->SetItem(idx, 1, buf); + defaultDisplayed = true; + } + else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultOutputDevice) + { + buf.Printf("<--"); + ctrl->SetItem(idx, 1, buf); + defaultDisplayed = true; + } + else + { + buf.Printf("---"); + ctrl->SetItem(idx, 1, buf); + } + buf.Printf(wxT("%s"), deviceInfo->name); + ctrl->SetItem(idx, 2, buf); + if(defaultDisplayed) + { + ai.m_textDevice->SetValue(buf); + } + + buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name); + ctrl->SetItem(idx, 3, buf); + + buf.Printf(wxT("%i"), deviceInfo->maxOutputChannels); + ctrl->SetItem(idx, 4, buf); + + buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowOutputLatency); + ctrl->SetItem(idx, 5, buf); + + buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighOutputLatency); + ctrl->SetItem(idx, 6, buf); + } + } + j++; + } + DisplaySupportedSampleRates(ai); +} + +//------------------------------------------------------------------------- +// OnRxInDeviceSelect() +//------------------------------------------------------------------------- +void AudioOptsDialog::OnRxInDeviceSelect(wxListEvent& evt) +{ + wxString str; + int index = evt.GetIndex(); + + str = m_listCtrlRxInDevices->GetItemText(index, 2); + m_textCtrlRxIn->SetValue(str); +} + +//------------------------------------------------------------------------- +// OnRxOutDeviceSelect() +//------------------------------------------------------------------------- +void AudioOptsDialog::OnRxOutDeviceSelect(wxListEvent& evt) +{ + wxString str; + int index = evt.GetIndex(); + + str = m_listCtrlRxOutDevices->GetItemText(index, 2); + m_textCtrlRxOut->SetValue(str); +} + +//------------------------------------------------------------------------- +// OnTxInDeviceSelect() +//------------------------------------------------------------------------- +void AudioOptsDialog::OnTxInDeviceSelect(wxListEvent& evt) +{ + wxString str; + int index = evt.GetIndex(); + + str = m_listCtrlTxInDevices->GetItemText(index, 2); + m_textCtrlTxIn->SetValue(str); +} + +//------------------------------------------------------------------------- +// OnTxOutDeviceSelect() +//------------------------------------------------------------------------- +void AudioOptsDialog::OnTxOutDeviceSelect(wxListEvent& evt) +{ + wxString str; + int index = evt.GetIndex(); + + str = m_listCtrlTxOutDevices->GetItemText(index, 2); + m_textCtrlTxOut->SetValue(str); +} + +//------------------------------------------------------------------------- +// OnRefreshClick() +//------------------------------------------------------------------------- +void AudioOptsDialog::OnRefreshClick(wxCommandEvent& event) +{ + m_notebook1->SetSelection(0); + showAPIInfo(); + populateParams(m_RxInDevices); + populateParams(m_RxOutDevices); + populateParams(m_TxInDevices); + populateParams(m_TxOutDevices); +} + +//------------------------------------------------------------------------- +// OnApplyAudioParameters() +//------------------------------------------------------------------------- +void AudioOptsDialog::OnApplyAudioParameters(wxCommandEvent& event) +{ + ExchangeData(EXCHANGE_DATA_OUT); + if(m_isPaInitialized) + { + if((pa_err = Pa_Terminate()) == paNoError) + { + m_isPaInitialized = false; + } + else + { + wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK); + } + } +} + +//------------------------------------------------------------------------- +// OnCancelAudioParameters() +//------------------------------------------------------------------------- +void AudioOptsDialog::OnCancelAudioParameters(wxCommandEvent& event) +{ + if(m_isPaInitialized) + { + if((pa_err = Pa_Terminate()) == paNoError) + { + m_isPaInitialized = false; + } + else + { + wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK); + } + } + EndModal(wxCANCEL); +} + +//------------------------------------------------------------------------- +// OnOkAudioParameters() +//------------------------------------------------------------------------- +void AudioOptsDialog::OnOkAudioParameters(wxCommandEvent& event) +{ + ExchangeData(EXCHANGE_DATA_OUT); + if(m_isPaInitialized) + { + if((pa_err = Pa_Terminate()) == paNoError) + { + m_isPaInitialized = false; + } + else + { + wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK); + } + } + EndModal(wxOK); +} diff --git a/fdmdv2/src/dlg_audiooptions.h b/fdmdv2/src/dlg_audiooptions.h new file mode 100644 index 00000000..0a08e853 --- /dev/null +++ b/fdmdv2/src/dlg_audiooptions.h @@ -0,0 +1,145 @@ +//========================================================================= +// 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. +//========================================================================= +#ifndef __AudioOptsDialog__ +#define __AudioOptsDialog__ + +#include "fdmdv2_main.h" + +#define ID_AUDIO_OPTIONS 1000 +#define AUDIO_IN 0 +#define AUDIO_OUT 1 + +#define ICON_TRANSPARENT 1 +#define ICON_CHECK 0 +#define ICON_toolchar 2 +#define ICON_tooldata 3 +#define ICON_toolgame 4 +#define ICON_toolnote 5 +#define ICON_TOOLTIME 6 +#define ICON_INARROW 7 +#define ICON_OUTARROW 8 +#define EXCHANGE_DATA_IN 0 +#define EXCHANGE_DATA_OUT 1 + +// gui classes generated by wxFormBuilder +//#include "gui.h" + +#include "portaudio.h" +#ifdef WIN32 +#if PA_USE_ASIO +#include "pa_asio.h" +#endif +#endif + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// AudioInfoDisplay +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +class AudioInfoDisplay +{ + public: + wxListCtrl* m_listDevices; + int direction; + wxTextCtrl* m_textDevice; + wxComboBox* m_cbSampleRate; +}; + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// class AudioOptsDialog +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +class AudioOptsDialog : public wxDialog +{ + private: + + protected: + PaError pa_err; + bool m_isPaInitialized; + wxImageList *m_imageListNormal; + wxImageList *m_imageListSmall; + + // protected event handlers + //void OnCloseFrame( wxCloseEvent& event ); + void OnDeviceSelect( wxListEvent& event ); + + //void OnExitClick( wxCommandEvent& event ); + //void DisplaySupportedSampleRates(const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters); + void DisplaySupportedSampleRates(AudioInfoDisplay ai); + void populateParams(AudioInfoDisplay); + void showAPIInfo(); + + AudioInfoDisplay m_RxInDevices; + AudioInfoDisplay m_RxOutDevices; + AudioInfoDisplay m_TxInDevices; + AudioInfoDisplay m_TxOutDevices; + wxPanel* m_panel1; + wxNotebook* m_notebook1; + wxPanel* m_panelRx; + wxListCtrl* m_listCtrlRxInDevices; + wxStaticText* m_staticText51; + wxTextCtrl* m_textCtrlRxIn; + wxStaticText* m_staticText6; + wxComboBox* m_cbSampleRateRxIn; + wxListCtrl* m_listCtrlRxOutDevices; + wxStaticText* m_staticText9; + wxTextCtrl* m_textCtrlRxOut; + wxStaticText* m_staticText10; + wxComboBox* m_cbSampleRateRxOut; + wxPanel* m_panelTx; + wxListCtrl* m_listCtrlTxInDevices; + wxStaticText* m_staticText12; + wxTextCtrl* m_textCtrlTxIn; + wxStaticText* m_staticText11; + wxComboBox* m_cbSampleRateTxIn; + wxListCtrl* m_listCtrlTxOutDevices; + wxStaticText* m_staticText81; + wxTextCtrl* m_textCtrlTxOut; + wxStaticText* m_staticText71; + wxComboBox* m_cbSampleRateTxOut; + wxPanel* m_panelAPI; + wxStaticText* m_staticText7; + wxTextCtrl* m_textStringVer; + wxStaticText* m_staticText8; + wxTextCtrl* m_textIntVer; + wxStaticText* m_staticText5; + wxTextCtrl* m_textCDevCount; + wxStaticText* m_staticText4; + wxTextCtrl* m_textAPICount; + wxButton* m_btnRefresh; + wxStdDialogButtonSizer* m_sdbSizer1; + wxButton* m_sdbSizer1OK; + wxButton* m_sdbSizer1Apply; + wxButton* m_sdbSizer1Cancel; + + // Virtual event handlers, overide them in your derived class + //virtual void OnActivateApp( wxActivateEvent& event ) { event.Skip(); } +// virtual void OnCloseFrame( wxCloseEvent& event ) { event.Skip(); } + void OnRxInDeviceSelect( wxListEvent& event ); + void OnRxOutDeviceSelect( wxListEvent& event ); + void OnTxInDeviceSelect( wxListEvent& event ); + void OnTxOutDeviceSelect( wxListEvent& event ); + void OnRefreshClick( wxCommandEvent& event ); + void OnApplyAudioParameters( wxCommandEvent& event ); + void OnCancelAudioParameters( wxCommandEvent& event ); + void OnOkAudioParameters( wxCommandEvent& event ); + // Virtual event handlers, overide them in your derived class + void OnClose( wxCloseEvent& event ) { event.Skip(); } + void OnHibernate( wxActivateEvent& event ) { event.Skip(); } + void OnIconize( wxIconizeEvent& event ) { event.Skip(); } + void OnInitDialog( wxInitDialogEvent& event ); + + public: + + 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 ); + ~AudioOptsDialog(); + void ExchangeData(int inout); +}; +#endif //__AudioOptsDialog__ diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index 122bc899..eb22243b 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -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) { diff --git a/fdmdv2/src/fdmdv2_main.h b/fdmdv2/src/fdmdv2_main.h index 2a185a9d..b741fcd3 100644 --- a/fdmdv2/src/fdmdv2_main.h +++ b/fdmdv2/src/fdmdv2_main.h @@ -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" diff --git a/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp b/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp index 4b269eb3..68d46ffb 100644 --- a/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp +++ b/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp @@ -375,16 +375,23 @@ void AudioOptsDialog::DisplaySupportedSampleRates(AudioInfoDisplay ai) 192000.0, -1 // negative terminated list }; int i; - int printCount; - PaError err; + //int printCount; + //PaError err; wxString str; - printCount = 0; + //printCount = 0; for(i = 0; standardSampleRates[i] > 0; i++) { str.Printf("%8.2f", standardSampleRates[i]); ai.m_cbSampleRate->AppendString(str); /* + err = Pa_IsFormatSupported(ai.inputParameters, outputParameters, standardSampleRates[i]); + if(err == paFormatIsSupported) + { + str.Printf("%8.2f", standardSampleRates[i]); + ai.m_cbSampleRate->AppendString(str); + } + err = Pa_IsFormatSupported(ai->inputParameters, outputParameters, standardSampleRates[i]); if(err == paFormatIsSupported) { @@ -663,7 +670,7 @@ void AudioOptsDialog::OnRefreshClick(wxCommandEvent& event) //------------------------------------------------------------------------- // OnApplyAudioParameters() //------------------------------------------------------------------------- - void AudioOptsDialog::OnApplyAudioParameters(wxCommandEvent& event) +void AudioOptsDialog::OnApplyAudioParameters(wxCommandEvent& event) { ExchangeData(EXCHANGE_DATA_OUT); if(m_isPaInitialized) @@ -676,6 +683,7 @@ void AudioOptsDialog::OnRefreshClick(wxCommandEvent& event) { wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK); } + } } //------------------------------------------------------------------------- diff --git a/fdmdv2/tests/pa_enum/pa_enum.mk b/fdmdv2/tests/pa_enum/pa_enum.mk index 630a8eb3..850cc8c0 100644 --- a/fdmdv2/tests/pa_enum/pa_enum.mk +++ b/fdmdv2/tests/pa_enum/pa_enum.mk @@ -13,7 +13,7 @@ CurrentFileName := CurrentFilePath := CurrentFileFullPath := User :=OFA-Staff -Date :=11/1/2012 +Date :=11/5/2012 CodeLitePath :="C:\bin\CodeLite" LinkerName :=g++ SharedObjectLinkerName :=g++ -shared -fPIC @@ -35,6 +35,8 @@ PreprocessOnlySwitch :=-E ObjectsFileList :="C:\bin\Projects\Radio\fdmdv2\tests\pa_enum\pa_enum.txt" PCHCompileFlags := MakeDirCommand :=makedir +RcCmpOptions := $(shell wx-config --rcflags) +RcCompilerName :=windres LinkOptions := -mwindows -s $(shell wx-config --debug=no --libs --unicode=yes) IncludePath := $(IncludeSwitch). $(IncludeSwitch)/bin/MinGW-4.6.1/msys/1.0/local/include $(IncludeSwitch)../../codec2-dev/src $(IncludeSwitch)/bin/Projects/Audio/libsndfile/ IncludePCH := @@ -50,8 +52,8 @@ LibPath := $(LibraryPathSwitch). $(LibraryPathSwitch)/bin/MinGW-4 AR := ar rcus CXX := g++ CC := gcc -CXXFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"914\" $(Preprocessors) -CFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"914\" $(Preprocessors) +CXXFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"936\" $(Preprocessors) +CFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"936\" $(Preprocessors) ##