--- /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 "fdmdv2_main.h"\r
+#include "dlg_audiooptions.h"\r
+\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+// AudioOptsDialog()\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+AudioOptsDialog::AudioOptsDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style)\r
+{\r
+ this->SetSizeHints(wxSize(650, 400), wxDefaultSize);\r
+\r
+ m_isPaInitialized = false;\r
+\r
+ // Make an image list containing large icons\r
+ m_imageListNormal = new wxImageList(32, 32, true);\r
+ m_imageListSmall = new wxImageList(16, 16, true);\r
+\r
+#ifdef __WXMSW__\r
+ // Give it an icon\r
+ SetIcon(wxICON("bitmaps/sample.ico"));\r
+\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchec.ico"), wxBITMAP_TYPE_ICO));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.ico"), wxBITMAP_TYPE_ICO));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.ico"), wxBITMAP_TYPE_ICO));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.ico"), wxBITMAP_TYPE_ICO));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.ico"), wxBITMAP_TYPE_ICO));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.ico"), wxBITMAP_TYPE_ICO));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.ico"), wxBITMAP_TYPE_ICO));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.ico"), wxBITMAP_TYPE_ICO));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.ico"), wxBITMAP_TYPE_ICO));\r
+#else\r
+ // Give it an icon\r
+ SetIcon(wxICON("bitmaps/sample.xpm"));\r
+\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchec.xpm"), wxBITMAP_TYPE_XPM, -1, -1));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.xpm"), wxBITMAP_TYPE_XPM, -1, -1));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.xpm"), wxBITMAP_TYPE_XPM, -1, -1));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.xpm"), wxBITMAP_TYPE_XPM, -1, -1));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.xpm"), wxBITMAP_TYPE_XPM, -1, -1));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.xpm"), wxBITMAP_TYPE_XPM, -1, -1));\r
+ m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.xpm"), wxBITMAP_TYPE_XPM, -1, -1));\r
+// m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.xpm"), wxBITMAP_TYPE_XPM));\r
+// m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.xpm"), wxBITMAP_TYPE_XPM));\r
+ #endif\r
+ if(!m_isPaInitialized)\r
+ {\r
+ if((pa_err = Pa_Initialize()) == paNoError)\r
+ {\r
+ m_isPaInitialized = true;\r
+ }\r
+ else\r
+ {\r
+ wxMessageBox(wxT("Port Audio failed to initialize"), wxT("Pa_Initialize"), wxOK);\r
+ return;\r
+ }\r
+ }\r
+\r
+ wxBoxSizer* mainSizer;\r
+ mainSizer = new wxBoxSizer(wxVERTICAL);\r
+ m_panel1 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);\r
+ wxBoxSizer* bSizer4;\r
+ bSizer4 = new wxBoxSizer(wxVERTICAL);\r
+ m_notebook1 = new wxNotebook(m_panel1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_BOTTOM);\r
+ m_panelRx = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);\r
+ wxBoxSizer* bSizer20;\r
+ bSizer20 = new wxBoxSizer(wxVERTICAL);\r
+ wxGridSizer* gSizer4;\r
+ gSizer4 = new wxGridSizer(2, 1, 0, 0);\r
+ wxStaticBoxSizer* sbSizer2;\r
+ sbSizer2 = new wxStaticBoxSizer(new wxStaticBox(m_panelRx, wxID_ANY, _("Rx Radio Device")), wxVERTICAL);\r
+ m_listCtrlRxInDevices = new wxListCtrl(m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES);\r
+ sbSizer2->Add(m_listCtrlRxInDevices, 1, wxALL|wxEXPAND, 1);\r
+ wxBoxSizer* bSizer811;\r
+ bSizer811 = new wxBoxSizer(wxHORIZONTAL);\r
+ m_staticText51 = new wxStaticText(m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText51->Wrap(-1);\r
+ bSizer811->Add(m_staticText51, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+ m_textCtrlRxIn = new wxTextCtrl(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);\r
+ bSizer811->Add(m_textCtrlRxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+ m_staticText6 = new wxStaticText(m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText6->Wrap(-1);\r
+ bSizer811->Add(m_staticText6, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+ m_cbSampleRateRxIn = new wxComboBox(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);\r
+ bSizer811->Add(m_cbSampleRateRxIn, 0, wxALL, 1);\r
+ sbSizer2->Add(bSizer811, 0, wxEXPAND, 5);\r
+ gSizer4->Add(sbSizer2, 1, wxEXPAND, 5);\r
+ wxStaticBoxSizer* sbSizer3;\r
+ sbSizer3 = new wxStaticBoxSizer(new wxStaticBox(m_panelRx, wxID_ANY, _("Rx Speaker Stream")), wxVERTICAL);\r
+ m_listCtrlRxOutDevices = new wxListCtrl(m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES);\r
+ sbSizer3->Add(m_listCtrlRxOutDevices, 1, wxALL|wxEXPAND, 1);\r
+ wxBoxSizer* bSizer81;\r
+ bSizer81 = new wxBoxSizer(wxHORIZONTAL);\r
+ m_staticText9 = new wxStaticText(m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText9->Wrap(-1);\r
+ bSizer81->Add(m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);\r
+ m_textCtrlRxOut = new wxTextCtrl(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);\r
+ bSizer81->Add(m_textCtrlRxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+ m_staticText10 = new wxStaticText(m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText10->Wrap(-1);\r
+ bSizer81->Add(m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+ m_cbSampleRateRxOut = new wxComboBox(m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);\r
+ bSizer81->Add(m_cbSampleRateRxOut, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+ sbSizer3->Add(bSizer81, 0, wxEXPAND, 2);\r
+ gSizer4->Add(sbSizer3, 1, wxEXPAND, 2);\r
+ bSizer20->Add(gSizer4, 1, wxEXPAND, 1);\r
+ m_panelRx->SetSizer(bSizer20);\r
+ m_panelRx->Layout();\r
+ bSizer20->Fit(m_panelRx);\r
+ m_notebook1->AddPage(m_panelRx, _("Receive"), true);\r
+ m_panelTx = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);\r
+ wxBoxSizer* bSizer18;\r
+ bSizer18 = new wxBoxSizer(wxVERTICAL);\r
+ wxGridSizer* gSizer2;\r
+ gSizer2 = new wxGridSizer(2, 1, 0, 0);\r
+ wxStaticBoxSizer* sbSizer22;\r
+ sbSizer22 = new wxStaticBoxSizer(new wxStaticBox(m_panelTx, wxID_ANY, _("Tx Microphone Stream")), wxVERTICAL);\r
+ m_listCtrlTxInDevices = new wxListCtrl(m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES);\r
+ sbSizer22->Add(m_listCtrlTxInDevices, 1, wxALL|wxEXPAND, 1);\r
+ wxBoxSizer* bSizer83;\r
+ bSizer83 = new wxBoxSizer(wxHORIZONTAL);\r
+ m_staticText12 = new wxStaticText(m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText12->Wrap(-1);\r
+ bSizer83->Add(m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+ m_textCtrlTxIn = new wxTextCtrl(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);\r
+ bSizer83->Add(m_textCtrlTxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+ m_staticText11 = new wxStaticText(m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText11->Wrap(-1);\r
+ bSizer83->Add(m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+ m_cbSampleRateTxIn = new wxComboBox(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);\r
+ bSizer83->Add(m_cbSampleRateTxIn, 0, wxALL, 1);\r
+ sbSizer22->Add(bSizer83, 0, wxEXPAND, 2);\r
+ gSizer2->Add(sbSizer22, 1, wxEXPAND, 5);\r
+ wxStaticBoxSizer* sbSizer21;\r
+ sbSizer21 = new wxStaticBoxSizer(new wxStaticBox(m_panelTx, wxID_ANY, _("Tx Radio Stream")), wxVERTICAL);\r
+ m_listCtrlTxOutDevices = new wxListCtrl(m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES);\r
+ sbSizer21->Add(m_listCtrlTxOutDevices, 1, wxALL|wxEXPAND, 2);\r
+ wxBoxSizer* bSizer82;\r
+ bSizer82 = new wxBoxSizer(wxHORIZONTAL);\r
+ m_staticText81 = new wxStaticText(m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText81->Wrap(-1);\r
+ bSizer82->Add(m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);\r
+ m_textCtrlTxOut = new wxTextCtrl(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);\r
+ bSizer82->Add(m_textCtrlTxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+ m_staticText71 = new wxStaticText(m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText71->Wrap(-1);\r
+ bSizer82->Add(m_staticText71, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);\r
+ m_cbSampleRateTxOut = new wxComboBox(m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);\r
+ bSizer82->Add(m_cbSampleRateTxOut, 0, wxALL, 1);\r
+ sbSizer21->Add(bSizer82, 0, wxEXPAND, 2);\r
+ gSizer2->Add(sbSizer21, 1, wxEXPAND, 5);\r
+ bSizer18->Add(gSizer2, 1, wxEXPAND, 1);\r
+ m_panelTx->SetSizer(bSizer18);\r
+ m_panelTx->Layout();\r
+ bSizer18->Fit(m_panelTx);\r
+ m_notebook1->AddPage(m_panelTx, _("Transmit"), false);\r
+ m_panelAPI = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);\r
+ wxBoxSizer* bSizer12;\r
+ bSizer12 = new wxBoxSizer(wxHORIZONTAL);\r
+ wxGridSizer* gSizer31;\r
+ gSizer31 = new wxGridSizer(2, 1, 0, 0);\r
+ wxStaticBoxSizer* sbSizer1;\r
+ sbSizer1 = new wxStaticBoxSizer(new wxStaticBox(m_panelAPI, wxID_ANY, _("PortAudio")), wxVERTICAL);\r
+ wxGridSizer* gSizer3;\r
+ gSizer3 = new wxGridSizer(4, 2, 0, 0);\r
+ m_staticText7 = new wxStaticText(m_panelAPI, wxID_ANY, _("PortAudio Version String:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText7->Wrap(-1);\r
+ gSizer3->Add(m_staticText7, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1);\r
+ wxBoxSizer* bSizer151;\r
+ bSizer151 = new wxBoxSizer(wxVERTICAL);\r
+ m_textStringVer = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY);\r
+ bSizer151->Add(m_textStringVer, 0, wxALL|wxEXPAND, 1);\r
+ gSizer3->Add(bSizer151, 1, wxEXPAND, 2);\r
+ m_staticText8 = new wxStaticText(m_panelAPI, wxID_ANY, _("PortAudio Int Version:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText8->Wrap(-1);\r
+ gSizer3->Add(m_staticText8, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1);\r
+ wxBoxSizer* bSizer13;\r
+ bSizer13 = new wxBoxSizer(wxVERTICAL);\r
+ m_textIntVer = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY);\r
+ bSizer13->Add(m_textIntVer, 0, wxALL|wxALIGN_CENTER_VERTICAL, 1);\r
+ gSizer3->Add(bSizer13, 1, wxEXPAND, 5);\r
+ m_staticText5 = new wxStaticText(m_panelAPI, wxID_ANY, _("Device Count:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText5->Wrap(-1);\r
+ gSizer3->Add(m_staticText5, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1);\r
+ wxBoxSizer* bSizer14;\r
+ bSizer14 = new wxBoxSizer(wxVERTICAL);\r
+ m_textCDevCount = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(45,-1), wxTE_READONLY);\r
+ m_textCDevCount->SetMaxSize(wxSize(45,-1));\r
+ bSizer14->Add(m_textCDevCount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+ gSizer3->Add(bSizer14, 1, wxEXPAND, 5);\r
+ m_staticText4 = new wxStaticText(m_panelAPI, wxID_ANY, _("API Count:"), wxDefaultPosition, wxDefaultSize, 0);\r
+ m_staticText4->Wrap(-1);\r
+ gSizer3->Add(m_staticText4, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1);\r
+ wxBoxSizer* bSizer15;\r
+ bSizer15 = new wxBoxSizer(wxVERTICAL);\r
+ m_textAPICount = new wxTextCtrl(m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(45,-1), wxTE_READONLY);\r
+ m_textAPICount->SetMaxSize(wxSize(45,-1));\r
+ bSizer15->Add(m_textAPICount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1);\r
+ gSizer3->Add(bSizer15, 1, wxEXPAND, 5);\r
+ sbSizer1->Add(gSizer3, 1, wxEXPAND, 2);\r
+ gSizer31->Add(sbSizer1, 1, wxEXPAND, 2);\r
+ wxStaticBoxSizer* sbSizer6;\r
+ sbSizer6 = new wxStaticBoxSizer(new wxStaticBox(m_panelAPI, wxID_ANY, _("Other")), wxVERTICAL);\r
+ gSizer31->Add(sbSizer6, 1, wxEXPAND, 5);\r
+ bSizer12->Add(gSizer31, 1, wxEXPAND, 5);\r
+ m_panelAPI->SetSizer(bSizer12);\r
+ m_panelAPI->Layout();\r
+ bSizer12->Fit(m_panelAPI);\r
+ m_notebook1->AddPage(m_panelAPI, _("API Info"), false);\r
+ bSizer4->Add(m_notebook1, 1, wxEXPAND | wxALL, 0);\r
+ m_panel1->SetSizer(bSizer4);\r
+ m_panel1->Layout();\r
+ bSizer4->Fit(m_panel1);\r
+ mainSizer->Add(m_panel1, 1, wxEXPAND | wxALL, 1);\r
+ wxBoxSizer* bSizer6;\r
+ bSizer6 = new wxBoxSizer(wxHORIZONTAL);\r
+ m_btnRefresh = new wxButton(this, wxID_ANY, _("Refresh"), wxDefaultPosition, wxDefaultSize, 0);\r
+ bSizer6->Add(m_btnRefresh, 0, wxALIGN_CENTER|wxALL, 2);\r
+ m_sdbSizer1 = new wxStdDialogButtonSizer();\r
+ m_sdbSizer1OK = new wxButton(this, wxID_OK);\r
+ m_sdbSizer1->AddButton(m_sdbSizer1OK);\r
+ m_sdbSizer1Apply = new wxButton(this, wxID_APPLY);\r
+ m_sdbSizer1->AddButton(m_sdbSizer1Apply);\r
+ m_sdbSizer1Cancel = new wxButton(this, wxID_CANCEL);\r
+ m_sdbSizer1->AddButton(m_sdbSizer1Cancel);\r
+ m_sdbSizer1->Realize();\r
+ bSizer6->Add(m_sdbSizer1, 1, wxALIGN_CENTER_VERTICAL, 2);\r
+ mainSizer->Add(bSizer6, 0, wxEXPAND, 2);\r
+ this->SetSizer(mainSizer);\r
+ this->Layout();\r
+ this->Centre(wxBOTH);\r
+// this->Centre(wxBOTH);\r
+\r
+ m_notebook1->SetSelection(0);\r
+\r
+ showAPIInfo();\r
+ m_RxInDevices.m_listDevices = m_listCtrlRxInDevices;\r
+ m_RxInDevices.direction = AUDIO_IN;\r
+ m_RxInDevices.m_textDevice = m_textCtrlRxIn;\r
+ m_RxInDevices.m_cbSampleRate = m_cbSampleRateRxIn;\r
+\r
+ m_RxOutDevices.m_listDevices = m_listCtrlRxOutDevices;\r
+ m_RxOutDevices.direction = AUDIO_OUT;\r
+ m_RxOutDevices.m_textDevice = m_textCtrlRxOut;\r
+ m_RxOutDevices.m_cbSampleRate = m_cbSampleRateRxOut;\r
+\r
+ m_TxInDevices.m_listDevices = m_listCtrlTxInDevices;\r
+ m_TxInDevices.direction = AUDIO_IN;\r
+ m_TxInDevices.m_textDevice = m_textCtrlTxIn;\r
+ m_TxInDevices.m_cbSampleRate = m_cbSampleRateTxIn;\r
+\r
+ m_TxOutDevices.m_listDevices = m_listCtrlTxOutDevices;\r
+ m_TxOutDevices.direction = AUDIO_OUT;\r
+ m_TxOutDevices.m_textDevice = m_textCtrlTxOut;\r
+ m_TxOutDevices.m_cbSampleRate = m_cbSampleRateTxOut;\r
+\r
+ populateParams(m_RxInDevices);\r
+ populateParams(m_RxOutDevices);\r
+ populateParams(m_TxInDevices);\r
+ populateParams(m_TxOutDevices);\r
+\r
+ m_listCtrlRxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxInDeviceSelect ), NULL, this );\r
+ m_listCtrlRxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnRxOutDeviceSelect ), NULL, this );\r
+ m_listCtrlTxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxInDeviceSelect ), NULL, this );\r
+ m_listCtrlTxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( AudioOptsDialog::OnTxOutDeviceSelect ), NULL, this );\r
+ m_btnRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnRefreshClick ), NULL, this );\r
+ m_sdbSizer1Apply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnApplyAudioParameters ), NULL, this );\r
+ m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnCancelAudioParameters ), NULL, this );\r
+ m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AudioOptsDialog::OnOkAudioParameters ), NULL, this );\r
+/*\r
+ void OnClose( wxCloseEvent& event ) { event.Skip(); }\r
+ void OnHibernate( wxActivateEvent& event ) { event.Skip(); }\r
+ void OnIconize( wxIconizeEvent& event ) { event.Skip(); }\r
+ void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }\r
+*/\r
+// this->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(AudioOptsDialog::OnClose));\r
+ this->Connect(wxEVT_HIBERNATE, wxActivateEventHandler(AudioOptsDialog::OnHibernate));\r
+ this->Connect(wxEVT_ICONIZE, wxIconizeEventHandler(AudioOptsDialog::OnIconize));\r
+ this->Connect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(AudioOptsDialog::OnInitDialog));\r
+}\r
+\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+// ~AudioOptsDialog()\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+AudioOptsDialog::~AudioOptsDialog()\r
+{\r
+ // Disconnect Events\r
+ this->Disconnect(wxEVT_HIBERNATE, wxActivateEventHandler(AudioOptsDialog::OnHibernate));\r
+ this->Disconnect(wxEVT_ICONIZE, wxIconizeEventHandler(AudioOptsDialog::OnIconize));\r
+ this->Disconnect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(AudioOptsDialog::OnInitDialog));\r
+\r
+ m_listCtrlRxInDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnRxInDeviceSelect), NULL, this);\r
+ m_listCtrlRxOutDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnRxOutDeviceSelect), NULL, this);\r
+ m_listCtrlTxInDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnTxInDeviceSelect), NULL, this);\r
+ m_listCtrlTxOutDevices->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(AudioOptsDialog::OnTxOutDeviceSelect), NULL, this);\r
+ m_btnRefresh->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnRefreshClick), NULL, this);\r
+ m_sdbSizer1Apply->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnApplyAudioParameters), NULL, this);\r
+ m_sdbSizer1Cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnCancelAudioParameters), NULL, this);\r
+ m_sdbSizer1OK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AudioOptsDialog::OnOkAudioParameters), NULL, this);\r
+}\r
+\r
+//-------------------------------------------------------------------------
+// OnInitDialog()
+//-------------------------------------------------------------------------
+void AudioOptsDialog::OnInitDialog( wxInitDialogEvent& event )
+{
+ ExchangeData(EXCHANGE_DATA_IN);
+ //populateAudioInfo();
+}
+
+//-------------------------------------------------------------------------
+// ExchangeData()
+//-------------------------------------------------------------------------
+void AudioOptsDialog::ExchangeData(int inout)
+{
+ wxConfigBase *pConfig = wxConfigBase::Get();
+ if(inout == EXCHANGE_DATA_IN)
+ {
+ m_textCtrlRxIn->SetValue(wxGetApp().m_strRxInAudio);
+ m_textCtrlRxOut->SetValue(wxGetApp().m_strRxOutAudio);
+ m_textCtrlTxIn->SetValue(wxGetApp().m_textVoiceInput);
+ m_textCtrlTxOut->SetValue(wxGetApp().m_textVoiceOutput);
+ }
+ if(inout == EXCHANGE_DATA_OUT)
+ {
+ wxGetApp().m_strRxInAudio = m_textCtrlRxIn->GetValue();
+ wxGetApp().m_strRxOutAudio = m_textCtrlRxOut->GetValue();
+ wxGetApp().m_textVoiceInput = m_textCtrlTxIn->GetValue();
+ wxGetApp().m_textVoiceOutput = m_textCtrlTxOut->GetValue();
+
+ pConfig->Write(wxT("/Audio/RxIn"), wxGetApp().m_strRxInAudio);
+ pConfig->Write(wxT("/Audio/RxOut"), wxGetApp().m_strRxOutAudio);
+ pConfig->Write(wxT("/Audio/TxIn"), wxGetApp().m_textVoiceInput);
+ pConfig->Write(wxT("/Audio/TxOut"), wxGetApp().m_textVoiceOutput);
+ pConfig->Write(wxT("/Audio/SampleRate"), wxGetApp().m_strSampleRate);
+ pConfig->Flush();
+ }
+ delete wxConfigBase::Set((wxConfigBase *) NULL);
+}
+\r
+//-------------------------------------------------------------------------\r
+// OnDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnDeviceSelect(wxListEvent& event)\r
+{\r
+ wxListItem info;\r
+ long item;\r
+ item = m_listCtrlRxInDevices->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);\r
+ wxMessageBox(m_listCtrlRxInDevices->GetItemText(item, 2), wxT("Item"), wxOK);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// DisplaySupportedSampleRates()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::DisplaySupportedSampleRates(AudioInfoDisplay ai)\r
+{\r
+ static double standardSampleRates[] =\r
+ {\r
+ 8000.0, 9600.0,\r
+ 11025.0, 12000.0,\r
+ 16000.0, 22050.0,\r
+ 24000.0, 32000.0,\r
+ 44100.0, 48000.0,\r
+ 88200.0, 96000.0,\r
+ 192000.0, -1 // negative terminated list\r
+ };\r
+ int i;\r
+ //int printCount;\r
+ //PaError err;\r
+ wxString str;\r
+\r
+ //printCount = 0;\r
+ for(i = 0; standardSampleRates[i] > 0; i++)\r
+ {\r
+ str.Printf("%8.2f", standardSampleRates[i]);\r
+ ai.m_cbSampleRate->AppendString(str);\r
+/*\r
+ err = Pa_IsFormatSupported(ai.inputParameters, outputParameters, standardSampleRates[i]);\r
+ if(err == paFormatIsSupported)\r
+ {\r
+ str.Printf("%8.2f", standardSampleRates[i]);\r
+ ai.m_cbSampleRate->AppendString(str);\r
+ }\r
+\r
+ err = Pa_IsFormatSupported(ai->inputParameters, outputParameters, standardSampleRates[i]);\r
+ if(err == paFormatIsSupported)\r
+ {\r
+ if(printCount == 0)\r
+ {\r
+ printf("\t%8.2f", standardSampleRates[i]);\r
+ printCount = 1;\r
+ }\r
+ else if(printCount == 4)\r
+ {\r
+ printf(",\n\t%8.2f", standardSampleRates[i]);\r
+ printCount = 1;\r
+ }\r
+ else\r
+ {\r
+ printf(", %8.2f", standardSampleRates[i]);\r
+ ++printCount;\r
+ }\r
+ }\r
+*/\r
+ }\r
+ ai.m_cbSampleRate->SetSelection(9);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// GetAPIInfo()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::showAPIInfo()\r
+{\r
+ wxString strval;\r
+ int apiCount = 0;\r
+ int numDevices = 0;\r
+\r
+ strval = Pa_GetVersionText();\r
+ m_textStringVer->SetValue(strval);\r
+\r
+ numDevices = Pa_GetVersion();\r
+ strval.Printf(wxT("%d"), numDevices);\r
+ m_textIntVer->SetValue(strval);\r
+\r
+ apiCount = Pa_GetHostApiCount();\r
+ strval.Printf(wxT("%d"), apiCount);\r
+ m_textAPICount->SetValue(strval);\r
+\r
+ numDevices = Pa_GetDeviceCount();\r
+ strval.Printf(wxT("%d"), numDevices);\r
+ m_textCDevCount->SetValue(strval);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// populateParams()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::populateParams(AudioInfoDisplay ai)\r
+{\r
+ const PaDeviceInfo *deviceInfo = NULL;\r
+ int j = 0;\r
+ wxListCtrl* ctrl = ai.m_listDevices;\r
+ int in_out = ai.direction;\r
+ long idx;\r
+ bool defaultDisplayed = false;\r
+ int numDevices;\r
+ wxListItem listItem;\r
+ wxString buf;\r
+ int devn;\r
+\r
+ numDevices = Pa_GetDeviceCount();\r
+\r
+ if(ctrl->GetColumnCount() > 0)\r
+ {\r
+ ctrl->ClearAll();\r
+ }\r
+ //ctrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);\r
+\r
+ listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+ listItem.SetText(wxT("Sel"));\r
+ idx = ctrl->InsertColumn(0, listItem);\r
+ ctrl->SetColumnWidth(0, 37);\r
+\r
+ listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+ listItem.SetText(wxT("Dflt"));\r
+ idx = ctrl->InsertColumn(1, listItem);\r
+ ctrl->SetColumnWidth(1, 37);\r
+\r
+ listItem.SetAlign(wxLIST_FORMAT_LEFT);\r
+ listItem.SetText(wxT("Device"));\r
+ idx = ctrl->InsertColumn(2, listItem);\r
+ ctrl->SetColumnWidth(2, 190);\r
+\r
+ listItem.SetAlign(wxLIST_FORMAT_LEFT);\r
+ listItem.SetText(wxT("API"));\r
+ idx = ctrl->InsertColumn(3, listItem);\r
+ ctrl->SetColumnWidth(3, 190);\r
+\r
+ if(in_out == AUDIO_IN)\r
+ {\r
+ listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+ listItem.SetText(wxT("# Inputs"));\r
+ idx = ctrl->InsertColumn(4, listItem);\r
+ ctrl->SetColumnWidth(4, 75);\r
+ }\r
+ else if(in_out == AUDIO_OUT)\r
+ {\r
+ listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+ listItem.SetText(wxT("# Outputs"));\r
+ idx = ctrl->InsertColumn(4, listItem);\r
+ ctrl->SetColumnWidth(4, 75);\r
+ }\r
+\r
+ listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+ listItem.SetText(wxT("Min Latency"));\r
+ ctrl->InsertColumn(5, listItem);\r
+ ctrl->SetColumnWidth(5, 100);\r
+\r
+ listItem.SetAlign(wxLIST_FORMAT_CENTRE);\r
+ listItem.SetText(wxT("Max Latency"));\r
+ ctrl->InsertColumn(6, listItem);\r
+ ctrl->SetColumnWidth(6, 100);\r
+\r
+ for(devn = 0; devn < numDevices; devn++)\r
+ {\r
+ buf.Printf(wxT(""));\r
+ deviceInfo = Pa_GetDeviceInfo(devn);\r
+ if(in_out == AUDIO_IN)\r
+ {\r
+ if(deviceInfo->maxInputChannels > 0)\r
+ {\r
+ idx = ctrl->InsertItem(j, ICON_TRANSPARENT);\r
+ defaultDisplayed = false;\r
+ if(devn == Pa_GetDefaultInputDevice())\r
+ {\r
+ buf.Printf("->>");\r
+ ctrl->SetItem(idx, 1, buf);\r
+ defaultDisplayed = true;\r
+ }\r
+ else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultInputDevice)\r
+ {\r
+ buf.Printf("-->");\r
+ ctrl->SetItem(idx, 1, buf);\r
+ defaultDisplayed = true;\r
+ }\r
+ else\r
+ {\r
+ buf.Printf("---");\r
+ ctrl->SetItem(idx, 1, buf);\r
+ defaultDisplayed = false;\r
+ }\r
+ buf.Printf(wxT("%s"), deviceInfo->name);\r
+ ctrl->SetItem(idx, 2, buf);\r
+ if(defaultDisplayed)\r
+ {\r
+ ai.m_textDevice->SetValue(buf);\r
+ }\r
+\r
+ buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name);\r
+ ctrl->SetItem(idx, 3, buf);\r
+\r
+ buf.Printf(wxT("%i"), deviceInfo->maxInputChannels);\r
+ ctrl->SetItem(idx, 4, buf);\r
+\r
+ buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowInputLatency);\r
+ ctrl->SetItem(idx, 5, buf);\r
+\r
+ buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighInputLatency);\r
+ ctrl->SetItem(idx, 6, buf);\r
+ }\r
+ }\r
+ else if(in_out == AUDIO_OUT)\r
+ {\r
+ if(deviceInfo->maxOutputChannels > 0)\r
+ {\r
+ idx = ctrl->InsertItem(j, ICON_TRANSPARENT);\r
+ defaultDisplayed = false;\r
+ if(devn == Pa_GetDefaultOutputDevice())\r
+ {\r
+ buf.Printf("<<-");\r
+ ctrl->SetItem(idx, 1, buf);\r
+ defaultDisplayed = true;\r
+ }\r
+ else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultOutputDevice)\r
+ {\r
+ buf.Printf("<--");\r
+ ctrl->SetItem(idx, 1, buf);\r
+ defaultDisplayed = true;\r
+ }\r
+ else\r
+ {\r
+ buf.Printf("---");\r
+ ctrl->SetItem(idx, 1, buf);\r
+ }\r
+ buf.Printf(wxT("%s"), deviceInfo->name);\r
+ ctrl->SetItem(idx, 2, buf);\r
+ if(defaultDisplayed)\r
+ {\r
+ ai.m_textDevice->SetValue(buf);\r
+ }\r
+\r
+ buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name);\r
+ ctrl->SetItem(idx, 3, buf);\r
+\r
+ buf.Printf(wxT("%i"), deviceInfo->maxOutputChannels);\r
+ ctrl->SetItem(idx, 4, buf);\r
+\r
+ buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowOutputLatency);\r
+ ctrl->SetItem(idx, 5, buf);\r
+\r
+ buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighOutputLatency);\r
+ ctrl->SetItem(idx, 6, buf);\r
+ }\r
+ }\r
+ j++;\r
+ }\r
+ DisplaySupportedSampleRates(ai);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnRxInDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnRxInDeviceSelect(wxListEvent& evt)\r
+{\r
+ wxString str;\r
+ int index = evt.GetIndex();\r
+\r
+ str = m_listCtrlRxInDevices->GetItemText(index, 2);\r
+ m_textCtrlRxIn->SetValue(str);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnRxOutDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnRxOutDeviceSelect(wxListEvent& evt)\r
+{\r
+ wxString str;\r
+ int index = evt.GetIndex();\r
+\r
+ str = m_listCtrlRxOutDevices->GetItemText(index, 2);\r
+ m_textCtrlRxOut->SetValue(str);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnTxInDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnTxInDeviceSelect(wxListEvent& evt)\r
+{\r
+ wxString str;\r
+ int index = evt.GetIndex();\r
+\r
+ str = m_listCtrlTxInDevices->GetItemText(index, 2);\r
+ m_textCtrlTxIn->SetValue(str);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnTxOutDeviceSelect()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnTxOutDeviceSelect(wxListEvent& evt)\r
+{\r
+ wxString str;\r
+ int index = evt.GetIndex();\r
+\r
+ str = m_listCtrlTxOutDevices->GetItemText(index, 2);\r
+ m_textCtrlTxOut->SetValue(str);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnRefreshClick()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnRefreshClick(wxCommandEvent& event)\r
+{\r
+ m_notebook1->SetSelection(0);\r
+ showAPIInfo();\r
+ populateParams(m_RxInDevices);\r
+ populateParams(m_RxOutDevices);\r
+ populateParams(m_TxInDevices);\r
+ populateParams(m_TxOutDevices);\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnApplyAudioParameters()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnApplyAudioParameters(wxCommandEvent& event)\r
+{\r
+ ExchangeData(EXCHANGE_DATA_OUT);
+ if(m_isPaInitialized)\r
+ {\r
+ if((pa_err = Pa_Terminate()) == paNoError)\r
+ {\r
+ m_isPaInitialized = false;\r
+ }\r
+ else\r
+ {\r
+ wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK);\r
+ }\r
+ }\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnCancelAudioParameters()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnCancelAudioParameters(wxCommandEvent& event)\r
+{\r
+ if(m_isPaInitialized)\r
+ {\r
+ if((pa_err = Pa_Terminate()) == paNoError)\r
+ {\r
+ m_isPaInitialized = false;\r
+ }\r
+ else\r
+ {\r
+ wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK);\r
+ }\r
+ }\r
+ EndModal(wxCANCEL);
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnOkAudioParameters()\r
+//-------------------------------------------------------------------------\r
+void AudioOptsDialog::OnOkAudioParameters(wxCommandEvent& event)\r
+{\r
+ ExchangeData(EXCHANGE_DATA_OUT);
+ if(m_isPaInitialized)\r
+ {\r
+ if((pa_err = Pa_Terminate()) == paNoError)\r
+ {\r
+ m_isPaInitialized = false;\r
+ }\r
+ else\r
+ {\r
+ wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK);\r
+ }\r
+ }\r
+ EndModal(wxOK);
+}\r