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