From: wittend99 Date: Sun, 28 Oct 2012 23:14:06 +0000 (+0000) Subject: git-svn-id: https://svn.code.sf.net/p/freetel/code@873 01035d8c-6547-0410-b346-abe4f9... X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=53523fd7ad66ea8fec485ab82827b2e90283e146;p=freetel-svn-tracking.git git-svn-id: https://svn.code.sf.net/p/freetel/code@873 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/fdmdv2/build/fdmdv2.workspace b/fdmdv2/build/fdmdv2.workspace index 6e5a6830..ff79c6f6 100644 --- a/fdmdv2/build/fdmdv2.workspace +++ b/fdmdv2/build/fdmdv2.workspace @@ -6,16 +6,19 @@ + + + diff --git a/fdmdv2/notes/portaudio_notes.txt b/fdmdv2/notes/portaudio_notes.txt index 6c657fcb..63f1bc78 100644 --- a/fdmdv2/notes/portaudio_notes.txt +++ b/fdmdv2/notes/portaudio_notes.txt @@ -1,3 +1,79 @@ +David Witten wittend@wwrinc.com +10:17 AM (0 minutes ago) + +to david +David, + +First, you mentioned audio breakups you were experiencing on Linux. +My sources related to Portaudio say that this is usually a frame +buffer sizing issue. More frames introduces latency, but less can +cause breakups in the flow. + +Short answer: Concerning that header file, assuming that you +downloaded and expanded the PortAudio source tarball (or zip file) you +need a path to [ portaudio/bindings/cpp/source/portaudiocpp/ ] for +your include search. + +You may not want to run against the default windows shared libraries. +I believe that they default to WMMA, which is pretty poor. + +This gets you into the fun parts of building portaudio stuff. I +attaching that particular file because I can't remember if it was +missing for some reason or just not in an obvious place. + +I have notes about portaudio in fdmdv2/notes, but the upshot is that +I built the main dll with: + + ./configure --with-winapi=directx --with-dxdir=/dxsdk +--enable-cxx=yes --enable-shared=yes --with-host_os=mingw +make +make install + +This puts the libfiles in predictable places in msys's little +universe, so that they can be found by the linker. This does not +necessarily make them easy to find when you want to run fdmdv2 from +the desktop, so I usually move a copy to wherever I am trying to run +fdmdv2 from. + +I intend to clean up some of this business before I'm done, but the +project as it stands uses portaudio in two ways. The main structure +of the program accesses portaudio through a thin wrapper that I wrote +(fdmdv_pa_wrapper.h). The current (largely non-functional) audio +configuration dialog uses the portaudiocpp binding wrapper provided by +the portaudio bundle. The code for it lives in [ +portaudio/bindings/cpp ] and involves a separate Makefile that lives +in there. There is no good reason for this, it is the consequence of +multiple strategies I explored. + +Portaudio *can* be built in a way that supports multiple Windows sound +APIs simultaneously. The FLDigi people seem to have done this. If +you drop in the dll's lifted from a recent DLDigi implementation for +Windows, GCC will link with them and will see all of the APS's +available. I posted the question of how to build the DLLs myself in +this way on the appropriate portaudio list and was told that it could +only be done using SCons. I decided that life was too short for that +right now and just built the dlls for direct sound, which has good +latency and is supported by Microsoft. + +Even restricting myself to DirectSound, I found that things were *not* +completely simple. I had to locate a version of the direct sound SDK +that had stuff where the build expected it to be. The most current +ones did not seem to work. I can zip this up and put it into the SVN, +but it is MS's code. + +I also built libraries for ASIO, WMMA, and other options early on, but +it seemed somewhat pointless at that point. The ones I am using are +just for DirectSound. I can use the ones from FLDigi if I want. You +will find my built DLLs scattered around the build, often in the +/Release subfolders. This is sloppy but is just for my convenience. + +Good luck, + +Dave + +=========================================== +!!! Track record trying to build PortAudio +=========================================== build: make clean diff --git a/fdmdv2/src/dlg_audio.cpp b/fdmdv2/src/dlg_audio.cpp index 66af826c..095af4a5 100644 --- a/fdmdv2/src/dlg_audio.cpp +++ b/fdmdv2/src/dlg_audio.cpp @@ -47,7 +47,7 @@ void AudioDlg::OnApply( wxCommandEvent& event ) //------------------------------------------------------------------------- void AudioDlg::OnClose( wxCloseEvent& event ) { - this->EndModal(wxID_OK); + this->EndModal(wxOK); } //------------------------------------------------------------------------- diff --git a/fdmdv2/src/dlg_audio.h b/fdmdv2/src/dlg_audio.h index 4e4f0cef..be818a44 100644 --- a/fdmdv2/src/dlg_audio.h +++ b/fdmdv2/src/dlg_audio.h @@ -30,9 +30,7 @@ class AudioDlg : public DlgAudio void OnInitDialog( wxInitDialogEvent& event ); void OnApply( wxCommandEvent& event ); void populateStandardSampleRates( - wxComboBox* target, - const portaudio::DirectionSpecificStreamParameters &inputParameters, - const portaudio::DirectionSpecificStreamParameters &outputParameters); + wxComboBox* target, const portaudio::DirectionSpecificStreamParameters &inputParameters, const portaudio::DirectionSpecificStreamParameters &outputParameters); int populateAudioInfo(); public: /** Constructor */ diff --git a/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp b/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp new file mode 100644 index 00000000..ae14e172 --- /dev/null +++ b/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp @@ -0,0 +1,717 @@ +//========================================================================= +// 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 "main.h" +#include "AudioOptsDialog.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_textRxInput->SetValue(wxGetApp().m_strRxInAudio); + m_textTxOutput->SetValue(wxGetApp().m_strRxOutAudio); + m_textVoiceInput->SetValue(wxGetApp().m_textVoiceInput); + m_textVoiceOutput->SetValue(wxGetApp().m_textVoiceOutput); + } + if(inout == EXCHANGE_DATA_OUT) + { + wxGetApp().m_strRxInAudio = m_textRxInput->GetValue(); + wxGetApp().m_strRxOutAudio = m_textTxOutput->GetValue(); + wxGetApp().m_textVoiceInput = m_textVoiceInput->GetValue(); + wxGetApp().m_textVoiceOutput = m_textVoiceOutput->GetValue(); + + pConfig->Write(wxT("/Audio/RxIn"), wxGetApp().m_strRxInAudio); + pConfig->Write(wxT("/Audio/RxOut"), wxGetApp().m_strRxOutAudio); + pConfig->Write(wxT("/Audio/TxIn"), wxGetApp().m_textVoiceInput); + pConfig->Write(wxT("/Audio/TxOut"), wxGetApp().m_textVoiceOutput); + pConfig->Write(wxT("/Audio/SampleRate"), wxGetApp().m_strSampleRate); + pConfig->Flush(); + } + delete wxConfigBase::Set((wxConfigBase *) NULL); +} + +//------------------------------------------------------------------------- +// 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) + { + 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) +{ + 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) +{ + 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/tests/pa_enum/AudioOptsDialog.h b/fdmdv2/tests/pa_enum/AudioOptsDialog.h new file mode 100644 index 00000000..15330bd7 --- /dev/null +++ b/fdmdv2/tests/pa_enum/AudioOptsDialog.h @@ -0,0 +1,144 @@ +//========================================================================= +// 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 "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/tests/pa_enum/gui.cpp b/fdmdv2/tests/pa_enum/gui.cpp index 2ba6be53..4059e356 100644 --- a/fdmdv2/tests/pa_enum/gui.cpp +++ b/fdmdv2/tests/pa_enum/gui.cpp @@ -11,313 +11,352 @@ MainFrameBase::MainFrameBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - wxBoxSizer* mainSizer; - mainSizer = new wxBoxSizer( wxVERTICAL ); + m_menuBar = new wxMenuBar( 0 ); + m_menuFile = new wxMenu(); + wxMenuItem* menuFileExit; + menuFileExit = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("E&xit") ) + wxT('\t') + wxT("Alt+X"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( menuFileExit ); - m_panel1 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer4; - bSizer4 = new wxBoxSizer( wxVERTICAL ); + m_menuBar->Append( m_menuFile, _("&File") ); - 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 ); + tools = new wxMenu(); + wxMenuItem* audioOptions; + audioOptions = new wxMenuItem( tools, ID_AUDIO_OPTIONS, wxString( _("&Audio Options") ) , _("Audio options dialog."), wxITEM_NORMAL ); + tools->Append( audioOptions ); - wxGridSizer* gSizer4; - gSizer4 = new wxGridSizer( 2, 1, 0, 0 ); + m_menuBar->Append( tools, _("&Tools") ); - wxStaticBoxSizer* sbSizer2; - sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panelRx, wxID_ANY, _("Rx Radio Device") ), wxVERTICAL ); + this->SetMenuBar( m_menuBar ); - 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* mainSizer; + mainSizer = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer811; - bSizer811 = new wxBoxSizer( wxHORIZONTAL ); + m_panel1 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + mainSizer->Add( m_panel1, 1, wxEXPAND | wxALL, 5 ); - 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 ); + this->SetSizer( mainSizer ); + this->Layout(); + m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY ); - 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 ); + this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - 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 ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) ); + this->Connect( menuFileExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnExitClick ) ); + this->Connect( audioOptions->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnAudioOptsDialog ) ); +} +MainFrameBase::~MainFrameBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) ); + this->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnExitClick ) ); + this->Disconnect( ID_AUDIO_OPTIONS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnAudioOptsDialog ) ); +} - sbSizer3->Add( bSizer81, 0, wxEXPAND, 2 ); +/* +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( wxDefaultSize, wxDefaultSize ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + wxBoxSizer* mainSizer; + mainSizer = new wxBoxSizer( wxVERTICAL ); - gSizer4->Add( sbSizer3, 1, wxEXPAND, 2 ); + 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 ); - bSizer20->Add( gSizer4, 1, wxEXPAND, 1 ); + 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_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 ); + m_listCtrlRxInDevices = new wxListCtrl( m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); + sbSizer2->Add( m_listCtrlRxInDevices, 1, wxALL|wxEXPAND, 1 ); - wxGridSizer* gSizer2; - gSizer2 = new wxGridSizer( 2, 1, 0, 0 ); + wxBoxSizer* bSizer811; + bSizer811 = new wxBoxSizer( wxHORIZONTAL ); - wxStaticBoxSizer* sbSizer22; - sbSizer22 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Microphone Stream") ), wxVERTICAL ); + 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_listCtrlTxInDevices = new wxListCtrl( m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); - sbSizer22->Add( m_listCtrlTxInDevices, 1, wxALL|wxEXPAND, 1 ); + m_textCtrlRxIn = new wxTextCtrl( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer811->Add( m_textCtrlRxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); - wxBoxSizer* bSizer83; - bSizer83 = new wxBoxSizer( wxHORIZONTAL ); + 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_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_cbSampleRateRxIn = new wxComboBox( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN ); + bSizer811->Add( m_cbSampleRateRxIn, 0, wxALL, 1 ); - m_textCtrlTxIn = new wxTextCtrl( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer83->Add( m_textCtrlTxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + sbSizer2->Add( bSizer811, 0, wxEXPAND, 5 ); - 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 ); + gSizer4->Add( sbSizer2, 1, wxEXPAND, 5 ); - m_cbSampleRateTxIn = new wxComboBox( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN ); - bSizer83->Add( m_cbSampleRateTxIn, 0, wxALL, 1 ); + 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 ); - sbSizer22->Add( bSizer83, 0, wxEXPAND, 2 ); + 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 ); - gSizer2->Add( sbSizer22, 1, wxEXPAND, 5 ); + m_textCtrlRxOut = new wxTextCtrl( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer81->Add( m_textCtrlRxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); - wxStaticBoxSizer* sbSizer21; - sbSizer21 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Radio Stream") ), wxVERTICAL ); + 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_listCtrlTxOutDevices = new wxListCtrl( m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); - sbSizer21->Add( m_listCtrlTxOutDevices, 1, wxALL|wxEXPAND, 2 ); + 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 ); - wxBoxSizer* bSizer82; - bSizer82 = new wxBoxSizer( wxHORIZONTAL ); + sbSizer3->Add( bSizer81, 0, wxEXPAND, 2 ); - 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 ); + gSizer4->Add( sbSizer3, 1, wxEXPAND, 2 ); - m_textCtrlTxOut = new wxTextCtrl( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer82->Add( m_textCtrlTxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + bSizer20->Add( gSizer4, 1, wxEXPAND, 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_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 ); - m_cbSampleRateTxOut = new wxComboBox( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN ); - bSizer82->Add( m_cbSampleRateTxOut, 0, wxALL, 1 ); + wxGridSizer* gSizer2; + gSizer2 = new wxGridSizer( 2, 1, 0, 0 ); + wxStaticBoxSizer* sbSizer22; + sbSizer22 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Microphone Stream") ), wxVERTICAL ); - sbSizer21->Add( bSizer82, 0, wxEXPAND, 2 ); + 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 ); - gSizer2->Add( sbSizer21, 1, wxEXPAND, 5 ); + 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 ); - bSizer18->Add( gSizer2, 1, wxEXPAND, 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 ); - 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 ); + sbSizer22->Add( bSizer83, 0, wxEXPAND, 2 ); - wxGridSizer* gSizer31; - gSizer31 = new wxGridSizer( 2, 1, 0, 0 ); + gSizer2->Add( sbSizer22, 1, wxEXPAND, 5 ); - wxStaticBoxSizer* sbSizer1; - sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("PortAudio") ), wxVERTICAL ); + wxStaticBoxSizer* sbSizer21; + sbSizer21 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Radio Stream") ), wxVERTICAL ); - wxGridSizer* gSizer3; - gSizer3 = new wxGridSizer( 4, 2, 0, 0 ); + m_listCtrlTxOutDevices = new wxListCtrl( m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); + sbSizer21->Add( m_listCtrlTxOutDevices, 1, wxALL|wxEXPAND, 2 ); - 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* bSizer82; + bSizer82 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer151; - bSizer151 = new wxBoxSizer( wxVERTICAL ); + 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_textStringVer = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); - bSizer151->Add( m_textStringVer, 0, wxALL|wxEXPAND, 1 ); + 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 ); - gSizer3->Add( bSizer151, 1, wxEXPAND, 2 ); + m_cbSampleRateTxOut = new wxComboBox( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN ); + bSizer82->Add( m_cbSampleRateTxOut, 0, wxALL, 1 ); - 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 ); + sbSizer21->Add( bSizer82, 0, wxEXPAND, 2 ); - wxBoxSizer* bSizer13; - bSizer13 = new wxBoxSizer( wxVERTICAL ); + gSizer2->Add( sbSizer21, 1, wxEXPAND, 5 ); - m_textIntVer = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); - bSizer13->Add( m_textIntVer, 0, wxALL|wxALIGN_CENTER_VERTICAL, 1 ); + 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 ); - gSizer3->Add( bSizer13, 1, wxEXPAND, 5 ); + wxGridSizer* gSizer31; + gSizer31 = new wxGridSizer( 2, 1, 0, 0 ); - 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 ); + wxStaticBoxSizer* sbSizer1; + sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("PortAudio") ), wxVERTICAL ); - wxBoxSizer* bSizer14; - bSizer14 = new wxBoxSizer( wxVERTICAL ); + wxGridSizer* gSizer3; + gSizer3 = new wxGridSizer( 4, 2, 0, 0 ); - m_textCDevCount = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 45,-1 ), wxTE_READONLY ); - m_textCDevCount->SetMaxSize( wxSize( 45,-1 ) ); + 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 ); - bSizer14->Add( m_textCDevCount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 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( bSizer14, 1, wxEXPAND, 5 ); + gSizer3->Add( bSizer151, 1, wxEXPAND, 2 ); - 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 ); + 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* bSizer15; - bSizer15 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer13; + bSizer13 = new wxBoxSizer( wxVERTICAL ); - m_textAPICount = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 45,-1 ), wxTE_READONLY ); - m_textAPICount->SetMaxSize( wxSize( 45,-1 ) ); + m_textIntVer = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); + bSizer13->Add( m_textIntVer, 0, wxALL|wxALIGN_CENTER_VERTICAL, 1 ); - bSizer15->Add( m_textAPICount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 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 ); - gSizer3->Add( bSizer15, 1, wxEXPAND, 5 ); + 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 ) ); - sbSizer1->Add( gSizer3, 1, wxEXPAND, 2 ); + bSizer14->Add( m_textCDevCount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + gSizer3->Add( bSizer14, 1, wxEXPAND, 5 ); - gSizer31->Add( sbSizer1, 1, wxEXPAND, 2 ); + 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 ); - wxStaticBoxSizer* sbSizer6; - sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("Other") ), wxVERTICAL ); + 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 ) ); - gSizer31->Add( sbSizer6, 1, wxEXPAND, 5 ); + bSizer15->Add( m_textAPICount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + gSizer3->Add( bSizer15, 1, wxEXPAND, 5 ); - bSizer12->Add( gSizer31, 1, wxEXPAND, 5 ); + sbSizer1->Add( gSizer3, 1, wxEXPAND, 2 ); + gSizer31->Add( sbSizer1, 1, wxEXPAND, 2 ); - m_panelAPI->SetSizer( bSizer12 ); - m_panelAPI->Layout(); - bSizer12->Fit( m_panelAPI ); - m_notebook1->AddPage( m_panelAPI, _("API Info"), false ); + wxStaticBoxSizer* sbSizer6; + sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("Other") ), wxVERTICAL ); - bSizer4->Add( m_notebook1, 1, wxEXPAND | wxALL, 0 ); + gSizer31->Add( sbSizer6, 1, wxEXPAND, 5 ); + bSizer12->Add( gSizer31, 1, wxEXPAND, 5 ); - m_panel1->SetSizer( bSizer4 ); - m_panel1->Layout(); - bSizer4->Fit( m_panel1 ); - mainSizer->Add( m_panel1, 1, wxEXPAND | wxALL, 1 ); + m_panelAPI->SetSizer( bSizer12 ); + m_panelAPI->Layout(); + bSizer12->Fit( m_panelAPI ); + m_notebook1->AddPage( m_panelAPI, _("API Info"), false ); - wxBoxSizer* bSizer6; - bSizer6 = new wxBoxSizer( wxHORIZONTAL ); + bSizer4->Add( m_notebook1, 1, wxEXPAND | wxALL, 0 ); - m_btnRefresh = new wxButton( this, wxID_ANY, _("Refresh"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer6->Add( m_btnRefresh, 0, wxALIGN_CENTER|wxALL, 2 ); + m_panel1->SetSizer( bSizer4 ); + m_panel1->Layout(); + bSizer4->Fit( m_panel1 ); + mainSizer->Add( m_panel1, 1, wxEXPAND | wxALL, 1 ); - 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(); + wxBoxSizer* bSizer6; + bSizer6 = new wxBoxSizer( wxHORIZONTAL ); - bSizer6->Add( m_sdbSizer1, 1, wxALIGN_CENTER_VERTICAL, 2 ); + 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(); - mainSizer->Add( bSizer6, 0, wxEXPAND, 2 ); + bSizer6->Add( m_sdbSizer1, 1, wxALIGN_CENTER_VERTICAL, 2 ); + mainSizer->Add( bSizer6, 0, wxEXPAND, 2 ); - this->SetSizer( mainSizer ); - this->Layout(); + this->SetSizer( mainSizer ); + this->Layout(); - this->Centre( wxBOTH ); - this->Centre( wxBOTH ); + this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - // Connect Events - this->Connect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) );this->Connect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) ); - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) ); - m_listCtrlRxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxInDeviceSelect ), NULL, this ); - m_listCtrlRxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxOutDeviceSelect ), NULL, this ); - m_listCtrlTxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxInDeviceSelect ), NULL, this ); - m_listCtrlTxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxOutDeviceSelect ), NULL, this ); - m_btnRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnRefreshClick ), NULL, this ); - m_sdbSizer1Apply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnApplyAudioParameters ), NULL, this ); - m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnCancelAudioParameters ), NULL, this ); - m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnOkAudioParameters ), NULL, this ); + // Connect Events +// this->Connect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( AudioOptsDialog::OnActivateApp ) ); +// this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AudioOptsDialog::OnCloseFrame ) ); + 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 ); + // Connect Events + 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 )); } -MainFrameBase::~MainFrameBase() +AudioOptsDialog::~AudioOptsDialog() { - // Disconnect Events - this->Disconnect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) );this->Disconnect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) ); - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) ); - m_listCtrlRxInDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxInDeviceSelect ), NULL, this ); - m_listCtrlRxOutDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxOutDeviceSelect ), NULL, this ); - m_listCtrlTxInDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxInDeviceSelect ), NULL, this ); - m_listCtrlTxOutDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxOutDeviceSelect ), NULL, this ); - m_btnRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnRefreshClick ), NULL, this ); - m_sdbSizer1Apply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnApplyAudioParameters ), NULL, this ); - m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnCancelAudioParameters ), NULL, this ); - m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnOkAudioParameters ), NULL, this ); + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AudioOptsDialog::OnClose)); + this->Disconnect( wxEVT_HIBERNATE, wxActivateEventHandler( AudioOptsDialog::OnHibernate)); + this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( AudioOptsDialog::OnIconize)); + this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( AudioOptsDialog::OnInitDialog)); + + // Disconnect Events +// this->Disconnect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( AudioOptsDialog::OnActivateApp ) ); +// this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AudioOptsDialog::OnCloseFrame ) ); + 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 ); } +*/ diff --git a/fdmdv2/tests/pa_enum/gui.h b/fdmdv2/tests/pa_enum/gui.h index 821e7cf4..7ab29552 100644 --- a/fdmdv2/tests/pa_enum/gui.h +++ b/fdmdv2/tests/pa_enum/gui.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -29,77 +30,33 @@ #include #include #include +#include /////////////////////////////////////////////////////////////////////////// - +#define ID_AUDIO_OPTIONS 1000 /////////////////////////////////////////////////////////////////////////////// /// Class MainFrameBase /////////////////////////////////////////////////////////////////////////////// class MainFrameBase : public wxFrame { - private: - - protected: - 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(); } - virtual void OnRxInDeviceSelect( wxListEvent& event ) { event.Skip(); } - virtual void OnRxOutDeviceSelect( wxListEvent& event ) { event.Skip(); } - virtual void OnTxInDeviceSelect( wxListEvent& event ) { event.Skip(); } - virtual void OnTxOutDeviceSelect( wxListEvent& event ) { event.Skip(); } - virtual void OnRefreshClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnApplyAudioParameters( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancelAudioParameters( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOkAudioParameters( wxCommandEvent& event ) { event.Skip(); } - - - public: - - MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PortAudio Device Enumeration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 690,400 ), long style = wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL ); -// MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PortAudio Device Enumeration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 690,400 ), long style = wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL ); - - ~MainFrameBase(); - + private: + + protected: + wxMenuBar* m_menuBar; + wxMenu* m_menuFile; + wxMenu* tools; + wxPanel* m_panel1; + wxStatusBar* m_statusBar; + + // Virtual event handlers, overide them in your derived class + virtual void OnCloseFrame( wxCloseEvent& event ) { event.Skip(); } + virtual void OnExitClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnAudioOptsDialog( wxCommandEvent& event ) { event.Skip(); } + + public: + MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PortAudio Device Enumeration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 690,400 ), long style = wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL ); + ~MainFrameBase(); }; #endif //__GUI_H__ diff --git a/fdmdv2/tests/pa_enum/main.cpp b/fdmdv2/tests/pa_enum/main.cpp index f84fd859..90235bc2 100644 --- a/fdmdv2/tests/pa_enum/main.cpp +++ b/fdmdv2/tests/pa_enum/main.cpp @@ -11,7 +11,7 @@ // gui.cpp source file which is generated by wxFormBuilder. //========================================================================= #include "main.h" - +#include "AudioOptsDialog.h" // initialize the application IMPLEMENT_APP(MainApp); @@ -27,94 +27,13 @@ bool MainApp::OnInit() } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= -// main application frame implementation +// class MainFrame() //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= MainFrame::MainFrame(wxWindow *parent) : MainFrameBase(parent) { - m_isPaInitialized = false; wxInitAllImageHandlers(); - // 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)); - m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.xpm"), wxBITMAP_TYPE_XPM)); - m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.xpm"), wxBITMAP_TYPE_XPM)); - m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.xpm"), wxBITMAP_TYPE_XPM)); - m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.xpm"), wxBITMAP_TYPE_XPM)); - m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.xpm"), wxBITMAP_TYPE_XPM)); - m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.xpm"), wxBITMAP_TYPE_XPM)); -// m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.xpm"), wxBITMAP_TYPE_XPM)); -// m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.xpm"), wxBITMAP_TYPE_XPM)); -/* - m_imageListNormal->Add(wxIcon( toolbrai_xpm )); - m_imageListNormal->Add(wxIcon( toolchar_xpm )); - m_imageListNormal->Add(wxIcon( tooldata_xpm )); - m_imageListNormal->Add(wxIcon( toolnote_xpm )); - m_imageListNormal->Add(wxIcon( tooltodo_xpm )); - m_imageListNormal->Add(wxIcon( toolchec_xpm )); - m_imageListNormal->Add(wxIcon( toolgame_xpm )); - m_imageListNormal->Add(wxIcon( tooltime_xpm )); - m_imageListNormal->Add(wxIcon( toolword_xpm )); - m_imageListSmall->Add(wxIcon(small1_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; - } - } - 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); + this->Connect(ID_AUDIO_OPTIONS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainFrame::OnAudioOptsDialog)); } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= @@ -122,413 +41,37 @@ MainFrame::MainFrame(wxWindow *parent) : MainFrameBase(parent) //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= MainFrame::~MainFrame() { + this->Disconnect(ID_AUDIO_OPTIONS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainFrame::OnAudioOptsDialog)); } -//------------------------------------------------------------------------- -// OnCloseFrame() -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- +// OnToolsAudioUI() +//------------------------------------------------------------------------- void MainFrame::OnCloseFrame(wxCloseEvent& 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); - } - } Destroy(); } -//------------------------------------------------------------------------- -// OnExitClick() -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- +// OnToolsAudioUI() +//------------------------------------------------------------------------- void MainFrame::OnExitClick(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); - } - } Destroy(); } -/* -//------------------------------------------------------------------------- -// getSelectedItems() -//------------------------------------------------------------------------- -long *MainFrame::getSelectedItems(wxListCtrl*listCtrl) -{ - long *items[]; - long item = listCtrl->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); - items[0] = item; - while ( item != -1 ) - { - wxLogMessage(wxT("\t%ld (%s)"), item, listCtrl->GetItemText(item).c_str()); - if ( ++shownCount > 10 ) - { - wxLogMessage(wxT("\t... more selected items snipped...")); - break; - } - item = listCtrl->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); - } -} return items; -*/ - -//------------------------------------------------------------------------- -// OnDeviceSelect() -//------------------------------------------------------------------------- -void MainFrame::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 MainFrame::DisplaySupportedSampleRates(const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters) -{ - 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; - - printCount = 0; - for(i=0; standardSampleRates[i] > 0; i++) - { - err = Pa_IsFormatSupported(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; - } - } - } - if(!printCount) - { - printf("None\n"); - } - else - { - printf("\n"); - } -} - -//------------------------------------------------------------------------- -// GetAPIInfo() -//------------------------------------------------------------------------- -void MainFrame::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 MainFrame::populateParams(AudioInfoDisplay ai) //wxListCtrl* ctrl, int in_out) -{ - const PaDeviceInfo *deviceInfo = NULL; - int j = 0; - wxListCtrl* ctrl = ai.m_listDevices; - int in_out = ai.direction; - //wxTextCtrl* txtCtrl = ai.m_textDevice; - //wxComboBox* cb = ai.m_cbSampleRate; - long idx; - int defaultDisplayed; - 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); - } - buf.Printf(wxT("%s"), deviceInfo->name); - ctrl->SetItem(idx, 2, 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); - - 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++; +//------------------------------------------------------------------------- +// OnToolsAudioUI() +//------------------------------------------------------------------------- +void MainFrame::OnAudioOptsDialog(wxCommandEvent& event) +{ + int rv = 0; + AudioOptsDialog *dlg = new AudioOptsDialog(NULL); + rv = dlg->ShowModal(); + if(rv == wxOK) + { +// dlg->ExchangeData(EXCHANGE_DATA_OUT); } -} - -//------------------------------------------------------------------------- -// OnRxInDeviceSelect() -//------------------------------------------------------------------------- -void MainFrame::OnRxInDeviceSelect(wxListEvent& event) -{ - wxString str; - int index = event.GetIndex(); - wxString str2; - - str2 = m_listCtrlRxInDevices->GetItemText(index, 2); - str.Printf("Name: %s", str2); - wxMessageBox(str, _("OnSelect")); - m_textCtrlRxIn->SetValue(str2); -// event.Skip(); -} - -//------------------------------------------------------------------------- -// OnRxOutDeviceSelect() -//------------------------------------------------------------------------- -void MainFrame::OnRxOutDeviceSelect(wxListEvent& event) -{ - wxString str; - int index = event.GetIndex(); - wxString str2; - - str2 = m_listCtrlRxOutDevices->GetItemText(index, 2); - str.Printf("Name: %s", str2); - wxMessageBox(str, _("OnSelect")); - m_textCtrlRxOut->SetValue(str2); -// event.Skip(); -} - -//------------------------------------------------------------------------- -// OnTxInDeviceSelect() -//------------------------------------------------------------------------- -void MainFrame::OnTxInDeviceSelect(wxListEvent& event) -{ - wxString str; - int index = event.GetIndex(); - wxString str2; - - str2 = m_listCtrlTxInDevices->GetItemText(index, 2); - str.Printf("Name: %s", str2); - wxMessageBox(str, _("OnSelect")); - m_textCtrlTxIn->SetValue(str2); -// event.Skip(); -} - -//------------------------------------------------------------------------- -// OnTxOutDeviceSelect() -//------------------------------------------------------------------------- -void MainFrame::OnTxOutDeviceSelect(wxListEvent& event) -{ - wxString str; - int index = event.GetIndex(); - wxString str2; - - str2 = m_listCtrlTxOutDevices->GetItemText(index, 2); - str.Printf("Name: %s", str2); - wxMessageBox(str, _("OnSelect")); - m_textCtrlTxOut->SetValue(str2); -// event.Skip(); -} - -//------------------------------------------------------------------------- -// OnRefreshClick() -//------------------------------------------------------------------------- -void MainFrame::OnRefreshClick(wxCommandEvent& event) -{ - m_notebook1->SetSelection(0); - showAPIInfo(); - populateParams(m_RxInDevices); - populateParams(m_RxOutDevices); - populateParams(m_TxInDevices); - populateParams(m_TxOutDevices); -} - -//------------------------------------------------------------------------- -// OnApplyAudioParameters() -//------------------------------------------------------------------------- -void MainFrame::OnApplyAudioParameters(wxCommandEvent& event) -{ - Close(); - event.Skip(); -} - -//------------------------------------------------------------------------- -// OnCancelAudioParameters() -//------------------------------------------------------------------------- -void MainFrame::OnCancelAudioParameters(wxCommandEvent& event) -{ - Close(); - //event.Skip(); -} + dlg->Destroy();; +} -//------------------------------------------------------------------------- -// OnOkAudioParameters() -//------------------------------------------------------------------------- -void MainFrame::OnOkAudioParameters(wxCommandEvent& event) -{ - Close(); - event.Skip(); -} diff --git a/fdmdv2/tests/pa_enum/main.h b/fdmdv2/tests/pa_enum/main.h index 6820e9c3..cecba295 100644 --- a/fdmdv2/tests/pa_enum/main.h +++ b/fdmdv2/tests/pa_enum/main.h @@ -16,48 +16,31 @@ // main wxWidgets header file #include #include -/* -#if !defined(__WXMSW__) && !defined(__WXPM__) - #include "../bitmaps/sample.xpm" -#endif - -#ifndef __WXMSW__ - #include "bitmaps/toolbrai.xpm" - #include "bitmaps/toolchar.xpm" - #include "bitmaps/tooldata.xpm" - #include "bitmaps/toolnote.xpm" - #include "bitmaps/tooltodo.xpm" - #include "bitmaps/toolchec.xpm" - #include "bitmaps/toolgame.xpm" - #include "bitmaps/tooltime.xpm" - #include "bitmaps/toolword.xpm" - #include "bitmaps/small1.xpm" -#endif -*/ - -#define AUDIO_IN 0 -#define AUDIO_OUT 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "gui.h" -#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 - -// gui classes generated by wxFormBuilder -#include "gui.h" -#include "portaudio.h" -#ifdef WIN32 -#if PA_USE_ASIO -#include "pa_asio.h" -#endif -#endif - - //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= // application class declaration //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= @@ -66,18 +49,6 @@ class MainApp : public wxApp public: virtual bool OnInit(); }; - -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= -// AudioInfoDisplay -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= -class AudioInfoDisplay -{ - public: - wxListCtrl* m_listDevices; - int direction; - wxTextCtrl* m_textDevice; - wxComboBox* m_cbSampleRate; -}; // declare global static function wxGetApp() DECLARE_APP(MainApp) @@ -90,35 +61,12 @@ class MainFrame : public MainFrameBase public: MainFrame( wxWindow *parent ); virtual ~MainFrame(); - PaError pa_err; - bool m_isPaInitialized; - wxImageList *m_imageListNormal; - wxImageList *m_imageListSmall; protected: // protected event handlers - void OnCloseFrame( wxCloseEvent& event ); - void OnDeviceSelect( wxListEvent& event ); - - void OnExitClick( wxCommandEvent& event ); - void DisplaySupportedSampleRates(const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters); - void populateParams(AudioInfoDisplay); - void showAPIInfo(); - -// void OnActivateApp( wxActivateEvent& event ) { event.Skip(); } -// 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); - AudioInfoDisplay m_RxInDevices; - AudioInfoDisplay m_RxOutDevices; - AudioInfoDisplay m_TxInDevices; - AudioInfoDisplay m_TxOutDevices; -}; + virtual void OnCloseFrame( wxCloseEvent& event ); + virtual void OnExitClick( wxCommandEvent& event ); + void OnAudioOptsDialog( wxCommandEvent& event ); +}; #endif //__main__ diff --git a/fdmdv2/tests/pa_enum/pa_enum.mk b/fdmdv2/tests/pa_enum/pa_enum.mk index ef78705b..25bbabb8 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 :=10/25/2012 +Date :=10/26/2012 CodeLitePath :="C:\bin\CodeLite" LinkerName :=g++ SharedObjectLinkerName :=g++ -shared -fPIC @@ -50,8 +50,8 @@ LibPath := $(LibraryPathSwitch). $(LibraryPathSwitch)/bin/MinGW-4 AR := ar rcus CXX := g++ CC := gcc -CXXFLAGS := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) -DSVN_REVISION=\"814\" $(Preprocessors) -CFLAGS := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) -DSVN_REVISION=\"814\" $(Preprocessors) +CXXFLAGS := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) -DSVN_REVISION=\"824\" $(Preprocessors) +CFLAGS := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) -DSVN_REVISION=\"824\" $(Preprocessors) ## @@ -62,7 +62,7 @@ WXWIN:=C:\bin\wxWidgets-2.9.4 PATH:=$(WXWIN)\lib\gcc_dll;$(PATH) WXCFG:=gcc_dll\mswu UNIT_TEST_PP_SRC_DIR:=C:\bin\UnitTest++-1.3 -Objects=$(IntermediateDirectory)/gui$(ObjectSuffix) $(IntermediateDirectory)/main$(ObjectSuffix) +Objects=$(IntermediateDirectory)/gui$(ObjectSuffix) $(IntermediateDirectory)/main$(ObjectSuffix) $(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix) ## ## Main Build Targets @@ -101,6 +101,14 @@ $(IntermediateDirectory)/main$(DependSuffix): main.cpp $(IntermediateDirectory)/main$(PreprocessSuffix): main.cpp @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/main$(PreprocessSuffix) "C:/bin/Projects/Radio/fdmdv2/tests/pa_enum/main.cpp" +$(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix): AudioOptsDialog.cpp $(IntermediateDirectory)/AudioOptsDialog$(DependSuffix) + $(CXX) $(IncludePCH) $(SourceSwitch) "C:/bin/Projects/Radio/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix) $(IncludePath) +$(IntermediateDirectory)/AudioOptsDialog$(DependSuffix): AudioOptsDialog.cpp + @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix) -MF$(IntermediateDirectory)/AudioOptsDialog$(DependSuffix) -MM "C:/bin/Projects/Radio/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp" + +$(IntermediateDirectory)/AudioOptsDialog$(PreprocessSuffix): AudioOptsDialog.cpp + @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/AudioOptsDialog$(PreprocessSuffix) "C:/bin/Projects/Radio/fdmdv2/tests/pa_enum/AudioOptsDialog.cpp" + -include $(IntermediateDirectory)/*$(DependSuffix) ## @@ -113,6 +121,9 @@ clean: $(RM) $(IntermediateDirectory)/main$(ObjectSuffix) $(RM) $(IntermediateDirectory)/main$(DependSuffix) $(RM) $(IntermediateDirectory)/main$(PreprocessSuffix) + $(RM) $(IntermediateDirectory)/AudioOptsDialog$(ObjectSuffix) + $(RM) $(IntermediateDirectory)/AudioOptsDialog$(DependSuffix) + $(RM) $(IntermediateDirectory)/AudioOptsDialog$(PreprocessSuffix) $(RM) $(OutputFile) $(RM) $(OutputFile).exe $(RM) "C:\bin\Projects\Radio\fdmdv2\build\.build-debug\pa_enum" diff --git a/fdmdv2/tests/pa_enum/pa_enum.project b/fdmdv2/tests/pa_enum/pa_enum.project index 5a1e49bc..f7e11fc1 100644 --- a/fdmdv2/tests/pa_enum/pa_enum.project +++ b/fdmdv2/tests/pa_enum/pa_enum.project @@ -10,10 +10,12 @@ + + diff --git a/fdmdv2/tests/pa_enum/pa_enum.txt b/fdmdv2/tests/pa_enum/pa_enum.txt index df3ff299..b01c823d 100644 --- a/fdmdv2/tests/pa_enum/pa_enum.txt +++ b/fdmdv2/tests/pa_enum/pa_enum.txt @@ -1 +1 @@ -./Debug/gui.o ./Debug/main.o +./Debug/gui.o ./Debug/main.o ./Debug/AudioOptsDialog.o