From: wittend99 Date: Fri, 17 Aug 2012 20:48:58 +0000 (+0000) Subject: git-svn-id: https://svn.code.sf.net/p/freetel/code@624 01035d8c-6547-0410-b346-abe4f9... X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=9ed4b516974ae380c24dfe3a33b8eae14eb765f7;p=freetel-svn-tracking.git git-svn-id: https://svn.code.sf.net/p/freetel/code@624 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/fdmdv2/tests/pa_cppbinding_test/Release/libportaudio-2.dll b/fdmdv2/tests/pa_cppbinding_test/Release/libportaudio-2.dll new file mode 100644 index 00000000..302e6635 Binary files /dev/null and b/fdmdv2/tests/pa_cppbinding_test/Release/libportaudio-2.dll differ diff --git a/fdmdv2/tests/pa_cppbinding_test/Release/libportaudiocpp-0.dll b/fdmdv2/tests/pa_cppbinding_test/Release/libportaudiocpp-0.dll new file mode 100644 index 00000000..eae7e694 Binary files /dev/null and b/fdmdv2/tests/pa_cppbinding_test/Release/libportaudiocpp-0.dll differ diff --git a/fdmdv2/tests/pa_cppbinding_test/asio_libs/.gitignore b/fdmdv2/tests/pa_cppbinding_test/asio_libs/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/fdmdv2/tests/pa_cppbinding_test/gui.cpp b/fdmdv2/tests/pa_cppbinding_test/gui.cpp new file mode 100644 index 00000000..5a2d98bf --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/gui.cpp @@ -0,0 +1,200 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Mar 17 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "gui.h" + +/////////////////////////////////////////////////////////////////////////// + +MainFrameBase::MainFrameBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + m_menuBar = new wxMenuBar( 0 ); + m_menuFile = new wxMenu(); + wxMenuItem* menuFileExit; + menuFileExit = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("E&xit") ) + wxT(' ') + wxT("Alt+X"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( menuFileExit ); + + m_menuBar->Append( m_menuFile, _("&File") ); + + this->SetMenuBar( m_menuBar ); + + wxBoxSizer* mainSizer; + mainSizer = new wxBoxSizer( wxVERTICAL ); + + m_audioInfo = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_audioInfo->SetMinSize( wxSize( 65,65 ) ); + + wxBoxSizer* bSizer17; + bSizer17 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer151; + bSizer151 = new wxBoxSizer( wxHORIZONTAL ); + + wxStaticBoxSizer* sbSizerLeft; + sbSizerLeft = new wxStaticBoxSizer( new wxStaticBox( m_audioInfo, wxID_ANY, _("label") ), wxVERTICAL ); + + m_listBoxTopLeft = new wxListBox( m_audioInfo, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + sbSizerLeft->Add( m_listBoxTopLeft, 1, wxALIGN_CENTER|wxALL|wxEXPAND, 3 ); + + + bSizer151->Add( sbSizerLeft, 1, wxEXPAND, 1 ); + + wxStaticBoxSizer* sbSizerRight; + sbSizerRight = new wxStaticBoxSizer( new wxStaticBox( m_audioInfo, wxID_ANY, _("label") ), wxVERTICAL ); + + m_textTopRight = new wxTextCtrl( m_audioInfo, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxTE_DONTWRAP|wxTE_MULTILINE ); + m_textTopRight->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_INACTIVEBORDER ) ); + + sbSizerRight->Add( m_textTopRight, 1, wxALIGN_CENTER|wxALL|wxEXPAND, 3 ); + + + bSizer151->Add( sbSizerRight, 1, wxEXPAND, 1 ); + + + bSizer17->Add( bSizer151, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer15; + bSizer15 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer9; + bSizer9 = new wxBoxSizer( wxVERTICAL ); + + m_listBoxMidLeft = new wxListBox( m_audioInfo, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer9->Add( m_listBoxMidLeft, 1, wxALIGN_CENTER|wxALL|wxEXPAND, 5 ); + + + bSizer15->Add( bSizer9, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 1 ); + + wxBoxSizer* bSizer18; + bSizer18 = new wxBoxSizer( wxVERTICAL ); + + m_listBoxMidRight = new wxListBox( m_audioInfo, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer18->Add( m_listBoxMidRight, 1, wxALIGN_CENTER|wxALL|wxEXPAND, 5 ); + + + bSizer15->Add( bSizer18, 1, wxEXPAND, 5 ); + + + bSizer17->Add( bSizer15, 1, wxEXPAND, 1 ); + + wxBoxSizer* bSizer91; + bSizer91 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer71; + bSizer71 = new wxBoxSizer( wxHORIZONTAL ); + + m_listBoxBottomLeft = new wxListBox( m_audioInfo, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer71->Add( m_listBoxBottomLeft, 1, wxALIGN_CENTER|wxALL|wxEXPAND, 5 ); + + + bSizer91->Add( bSizer71, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer31; + bSizer31 = new wxBoxSizer( wxHORIZONTAL ); + + bSizer31->SetMinSize( wxSize( 65,65 ) ); + m_listBoxBottomRight = new wxListBox( m_audioInfo, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer31->Add( m_listBoxBottomRight, 1, wxALIGN_CENTER|wxALL|wxEXPAND, 5 ); + + + bSizer91->Add( bSizer31, 1, wxEXPAND, 5 ); + + + bSizer17->Add( bSizer91, 1, wxEXPAND, 1 ); + + wxBoxSizer* bSizer14; + bSizer14 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer13; + bSizer13 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer12; + bSizer12 = new wxBoxSizer( wxVERTICAL ); + + m_btnLeft = new wxButton( m_audioInfo, wxID_ANY, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer12->Add( m_btnLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1 ); + + + bSizer13->Add( bSizer12, 1, 0, 1 ); + + wxBoxSizer* bSizer11; + bSizer11 = new wxBoxSizer( wxVERTICAL ); + + m_btnRight = new wxButton( m_audioInfo, wxID_ANY, _("On / Off"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer11->Add( m_btnRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL, 1 ); + + + bSizer13->Add( bSizer11, 1, 0, 1 ); + + + bSizer14->Add( bSizer13, 1, wxALIGN_BOTTOM|wxALIGN_RIGHT, 1 ); + + + bSizer17->Add( bSizer14, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer16; + bSizer16 = new wxBoxSizer( wxVERTICAL ); + + m_button1 = new wxButton( m_audioInfo, wxID_ANY, _("Exit"), wxDefaultPosition, wxDefaultSize, 0 ); + m_button1->SetDefault(); + bSizer16->Add( m_button1, 0, 0, 1 ); + + + bSizer17->Add( bSizer16, 0, wxALIGN_BOTTOM|wxALIGN_RIGHT, 1 ); + + + m_audioInfo->SetSizer( bSizer17 ); + m_audioInfo->Layout(); + bSizer17->Fit( m_audioInfo ); + mainSizer->Add( m_audioInfo, 1, wxALIGN_CENTER|wxEXPAND, 1 ); + + + this->SetSizer( mainSizer ); + this->Layout(); + m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) ); + this->Connect( menuFileExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnExitClick ) ); + m_listBoxTopLeft->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListBoxTopLeftBox ), NULL, this ); + m_listBoxTopLeft->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListBoxTopLeftDClick ), NULL, this ); + m_listBoxMidLeft->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListMidLeftBoxClick ), NULL, this ); + m_listBoxMidLeft->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListMidLeftBoxDClick ), NULL, this ); + m_listBoxMidRight->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListMidRightBoxClick ), NULL, this ); + m_listBoxMidRight->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListMidRightBoxDClick ), NULL, this ); + m_listBoxBottomLeft->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListBoxBottomLeftClick ), NULL, this ); + m_listBoxBottomLeft->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListBoxBottomLeftDClick ), NULL, this ); + m_listBoxBottomRight->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListBoxBottomRIghtClick ), NULL, this ); + m_listBoxBottomRight->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListBoxBottomRIghtDClick ), NULL, this ); + m_btnLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnBtnLeft ), NULL, this ); + m_btnRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnBtnRight ), NULL, this ); + m_button1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnExitClick ), NULL, this ); +} + +MainFrameBase::~MainFrameBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) ); + this->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnExitClick ) ); + m_listBoxTopLeft->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListBoxTopLeftBox ), NULL, this ); + m_listBoxTopLeft->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListBoxTopLeftDClick ), NULL, this ); + m_listBoxMidLeft->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListMidLeftBoxClick ), NULL, this ); + m_listBoxMidLeft->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListMidLeftBoxDClick ), NULL, this ); + m_listBoxMidRight->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListMidRightBoxClick ), NULL, this ); + m_listBoxMidRight->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListMidRightBoxDClick ), NULL, this ); + m_listBoxBottomLeft->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListBoxBottomLeftClick ), NULL, this ); + m_listBoxBottomLeft->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListBoxBottomLeftDClick ), NULL, this ); + m_listBoxBottomRight->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainFrameBase::OnListBoxBottomRIghtClick ), NULL, this ); + m_listBoxBottomRight->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainFrameBase::OnListBoxBottomRIghtDClick ), NULL, this ); + m_btnLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnBtnLeft ), NULL, this ); + m_btnRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnBtnRight ), NULL, this ); + m_button1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnExitClick ), NULL, this ); + +} diff --git a/fdmdv2/tests/pa_cppbinding_test/gui.fbp b/fdmdv2/tests/pa_cppbinding_test/gui.fbp new file mode 100644 index 00000000..58075679 --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/gui.fbp @@ -0,0 +1,1358 @@ + + + + + + C++|Python|XRC + 1 + source_name + 0 + 0 + res + UTF-8 + connect + gui + 1000 + none + 1 + gui + + . + + 1 + 1 + 1 + 0 + 0 + + 1 + 1 + 1 + 1 + + 0 + + + + + + + 1 + wxBOTH + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + impl_virtual + + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + MainFrameBase + 1 + + + 1 + + Resizable + 1 + 651,445 + wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER + + Test PortAudio CPP Binding + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + 1 + + + + + + + + + + OnCloseFrame + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + MainMenu + + 0 + + + 0 + + 1 + m_menuBar + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + &File + m_menuFile + protected + + + 0 + 1 + + wxID_EXIT + wxITEM_NORMAL + E&xit + menuFileExit + none + Alt+X + + OnExitClick + + + + + + + mainSizer + wxVERTICAL + none + + 1 + wxALIGN_CENTER|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + 65,65 + 1 + m_audioInfo + 1 + + + protected + 1 + + Resizable + 1 + + ; + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer17 + wxVERTICAL + none + + 5 + wxEXPAND + 1 + + + bSizer151 + wxHORIZONTAL + none + + 1 + wxEXPAND + 1 + + wxID_ANY + label + + sbSizerLeft + wxVERTICAL + none + + + 3 + wxALIGN_CENTER|wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_listBoxTopLeft + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + OnListBoxTopLeftBox + OnListBoxTopLeftDClick + + + + + + + + + + + + + + + + + + + 1 + wxEXPAND + 1 + + wxID_ANY + label + + sbSizerRight + wxVERTICAL + none + + + 3 + wxALIGN_CENTER|wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + wxSYS_COLOUR_INACTIVEBORDER + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textTopRight + 1 + + + protected + 1 + + Resizable + 1 + + wxHSCROLL|wxTE_DONTWRAP|wxTE_MULTILINE + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxEXPAND + 1 + + + bSizer15 + wxHORIZONTAL + none + + 1 + wxALIGN_CENTER_VERTICAL|wxEXPAND + 1 + + + bSizer9 + wxVERTICAL + none + + 5 + wxALIGN_CENTER|wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_listBoxMidLeft + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + OnListMidLeftBoxClick + OnListMidLeftBoxDClick + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer18 + wxVERTICAL + none + + 5 + wxALIGN_CENTER|wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_listBoxMidRight + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + OnListMidRightBoxClick + OnListMidRightBoxDClick + + + + + + + + + + + + + + + + + + + + + 1 + wxEXPAND + 1 + + + bSizer91 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizer71 + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER|wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_listBoxBottomLeft + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + OnListBoxBottomLeftClick + OnListBoxBottomLeftDClick + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 65,65 + bSizer31 + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER|wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_listBoxBottomRight + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + OnListBoxBottomRIghtClick + OnListBoxBottomRIghtDClick + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer14 + wxHORIZONTAL + none + + 1 + wxALIGN_BOTTOM|wxALIGN_RIGHT + 1 + + + bSizer13 + wxHORIZONTAL + none + + 1 + + 1 + + + bSizer12 + wxVERTICAL + none + + 1 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Ok + + 0 + + + 0 + + 1 + m_btnLeft + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnBtnLeft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + 1 + + + bSizer11 + wxVERTICAL + none + + 1 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + On / Off + + 0 + + + 0 + + 1 + m_btnRight + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnBtnRight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALIGN_BOTTOM|wxALIGN_RIGHT + 0 + + + bSizer16 + wxVERTICAL + none + + 1 + + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Exit + + 0 + + + 0 + + 1 + m_button1 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnExitClick + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_statusBar + 1 + + + protected + 1 + + Resizable + 1 + + wxST_SIZEGRIP + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fdmdv2/tests/pa_cppbinding_test/gui.h b/fdmdv2/tests/pa_cppbinding_test/gui.h new file mode 100644 index 00000000..540d6bcb --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/gui.h @@ -0,0 +1,82 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Mar 17 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __GUI_H__ +#define __GUI_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class MainFrameBase +/////////////////////////////////////////////////////////////////////////////// +class MainFrameBase : public wxFrame +{ + private: + + protected: + wxMenuBar* m_menuBar; + wxMenu* m_menuFile; + wxPanel* m_audioInfo; + wxListBox* m_listBoxTopLeft; + wxTextCtrl* m_textTopRight; + wxListBox* m_listBoxMidLeft; + wxListBox* m_listBoxMidRight; + wxListBox* m_listBoxBottomLeft; + wxListBox* m_listBoxBottomRight; + wxButton* m_btnLeft; + wxButton* m_btnRight; + wxButton* m_button1; + wxStatusBar* m_statusBar; + + // Virtual event handlers, overide them in your derived class + virtual void OnCloseFrame( wxCloseEvent& event ) { event.Skip(); } + virtual void OnExitClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListBoxTopLeftBox( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListBoxTopLeftDClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListMidLeftBoxClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListMidLeftBoxDClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListMidRightBoxClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListMidRightBoxDClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListBoxBottomLeftClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListBoxBottomLeftDClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListBoxBottomRIghtClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnListBoxBottomRIghtDClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnBtnLeft( wxCommandEvent& event ) { event.Skip(); } + virtual void OnBtnRight( wxCommandEvent& event ) { event.Skip(); } + + + public: + + MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Test PortAudio CPP Binding "), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 651,445 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL ); + + ~MainFrameBase(); + +}; + +#endif //__GUI_H__ diff --git a/fdmdv2/tests/pa_cppbinding_test/gui.py b/fdmdv2/tests/pa_cppbinding_test/gui.py new file mode 100644 index 00000000..7b4d2fa2 --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/gui.py @@ -0,0 +1,227 @@ +# -*- coding: utf-8 -*- + +########################################################################### +## Python code generated with wxFormBuilder (version Mar 17 2012) +## http://www.wxformbuilder.org/ +## +## PLEASE DO "NOT" EDIT THIS FILE! +########################################################################### + +import wx +import wx.xrc + +import gettext +_ = gettext.gettext + +########################################################################### +## Class MainFrameBase +########################################################################### + +class MainFrameBase ( wx.Frame ): + + def __init__( self, parent ): + wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = _(u"Test PortAudio CPP Binding "), pos = wx.DefaultPosition, size = wx.Size( 651,445 ), style = wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER|wx.TAB_TRAVERSAL ) + + self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize ) + + self.m_menuBar = wx.MenuBar( 0 ) + self.m_menuFile = wx.Menu() + self.menuFileExit = wx.MenuItem( self.m_menuFile, wx.ID_EXIT, _(u"E&xit")+ u"\t" + u"Alt+X", wx.EmptyString, wx.ITEM_NORMAL ) + self.m_menuFile.AppendItem( self.menuFileExit ) + + self.m_menuBar.Append( self.m_menuFile, _(u"&File") ) + + self.SetMenuBar( self.m_menuBar ) + + mainSizer = wx.BoxSizer( wx.VERTICAL ) + + self.m_audioInfo = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) + self.m_audioInfo.SetMinSize( wx.Size( 65,65 ) ) + + bSizer17 = wx.BoxSizer( wx.VERTICAL ) + + bSizer151 = wx.BoxSizer( wx.HORIZONTAL ) + + sbSizerLeft = wx.StaticBoxSizer( wx.StaticBox( self.m_audioInfo, wx.ID_ANY, _(u"label") ), wx.VERTICAL ) + + m_listBoxTopLeftChoices = [] + self.m_listBoxTopLeft = wx.ListBox( self.m_audioInfo, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_listBoxTopLeftChoices, 0 ) + sbSizerLeft.Add( self.m_listBoxTopLeft, 1, wx.ALIGN_CENTER|wx.ALL|wx.EXPAND, 3 ) + + + bSizer151.Add( sbSizerLeft, 1, wx.EXPAND, 1 ) + + sbSizerRight = wx.StaticBoxSizer( wx.StaticBox( self.m_audioInfo, wx.ID_ANY, _(u"label") ), wx.VERTICAL ) + + self.m_textTopRight = wx.TextCtrl( self.m_audioInfo, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.TE_DONTWRAP|wx.TE_MULTILINE ) + self.m_textTopRight.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_INACTIVEBORDER ) ) + + sbSizerRight.Add( self.m_textTopRight, 1, wx.ALIGN_CENTER|wx.ALL|wx.EXPAND, 3 ) + + + bSizer151.Add( sbSizerRight, 1, wx.EXPAND, 1 ) + + + bSizer17.Add( bSizer151, 1, wx.EXPAND, 5 ) + + bSizer15 = wx.BoxSizer( wx.HORIZONTAL ) + + bSizer9 = wx.BoxSizer( wx.VERTICAL ) + + m_listBoxMidLeftChoices = [] + self.m_listBoxMidLeft = wx.ListBox( self.m_audioInfo, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_listBoxMidLeftChoices, 0 ) + bSizer9.Add( self.m_listBoxMidLeft, 1, wx.ALIGN_CENTER|wx.ALL|wx.EXPAND, 5 ) + + + bSizer15.Add( bSizer9, 1, wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, 1 ) + + bSizer18 = wx.BoxSizer( wx.VERTICAL ) + + m_listBoxMidRightChoices = [] + self.m_listBoxMidRight = wx.ListBox( self.m_audioInfo, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_listBoxMidRightChoices, 0 ) + bSizer18.Add( self.m_listBoxMidRight, 1, wx.ALIGN_CENTER|wx.ALL|wx.EXPAND, 5 ) + + + bSizer15.Add( bSizer18, 1, wx.EXPAND, 5 ) + + + bSizer17.Add( bSizer15, 1, wx.EXPAND, 1 ) + + bSizer91 = wx.BoxSizer( wx.HORIZONTAL ) + + bSizer71 = wx.BoxSizer( wx.HORIZONTAL ) + + m_listBoxBottomLeftChoices = [] + self.m_listBoxBottomLeft = wx.ListBox( self.m_audioInfo, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_listBoxBottomLeftChoices, 0 ) + bSizer71.Add( self.m_listBoxBottomLeft, 1, wx.ALIGN_CENTER|wx.ALL|wx.EXPAND, 5 ) + + + bSizer91.Add( bSizer71, 1, wx.EXPAND, 5 ) + + bSizer31 = wx.BoxSizer( wx.HORIZONTAL ) + + bSizer31.SetMinSize( wx.Size( 65,65 ) ) + m_listBoxBottomRightChoices = [] + self.m_listBoxBottomRight = wx.ListBox( self.m_audioInfo, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_listBoxBottomRightChoices, 0 ) + bSizer31.Add( self.m_listBoxBottomRight, 1, wx.ALIGN_CENTER|wx.ALL|wx.EXPAND, 5 ) + + + bSizer91.Add( bSizer31, 1, wx.EXPAND, 5 ) + + + bSizer17.Add( bSizer91, 1, wx.EXPAND, 1 ) + + bSizer14 = wx.BoxSizer( wx.HORIZONTAL ) + + bSizer13 = wx.BoxSizer( wx.HORIZONTAL ) + + bSizer12 = wx.BoxSizer( wx.VERTICAL ) + + self.m_btnLeft = wx.Button( self.m_audioInfo, wx.ID_ANY, _(u"Ok"), wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer12.Add( self.m_btnLeft, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 1 ) + + + bSizer13.Add( bSizer12, 1, 0, 1 ) + + bSizer11 = wx.BoxSizer( wx.VERTICAL ) + + self.m_btnRight = wx.Button( self.m_audioInfo, wx.ID_ANY, _(u"On / Off"), wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer11.Add( self.m_btnRight, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 1 ) + + + bSizer13.Add( bSizer11, 1, 0, 1 ) + + + bSizer14.Add( bSizer13, 1, wx.ALIGN_BOTTOM|wx.ALIGN_RIGHT, 1 ) + + + bSizer17.Add( bSizer14, 0, wx.EXPAND, 5 ) + + bSizer16 = wx.BoxSizer( wx.VERTICAL ) + + self.m_button1 = wx.Button( self.m_audioInfo, wx.ID_ANY, _(u"Exit"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_button1.SetDefault() + bSizer16.Add( self.m_button1, 0, 0, 1 ) + + + bSizer17.Add( bSizer16, 0, wx.ALIGN_BOTTOM|wx.ALIGN_RIGHT, 1 ) + + + self.m_audioInfo.SetSizer( bSizer17 ) + self.m_audioInfo.Layout() + bSizer17.Fit( self.m_audioInfo ) + mainSizer.Add( self.m_audioInfo, 1, wx.ALIGN_CENTER|wx.EXPAND, 1 ) + + + self.SetSizer( mainSizer ) + self.Layout() + self.m_statusBar = self.CreateStatusBar( 1, wx.ST_SIZEGRIP, wx.ID_ANY ) + + self.Centre( wx.BOTH ) + + # Connect Events + self.Bind( wx.EVT_CLOSE, self.OnCloseFrame ) + self.Bind( wx.EVT_MENU, self.OnExitClick, id = self.menuFileExit.GetId() ) + self.m_listBoxTopLeft.Bind( wx.EVT_LISTBOX, self.OnListBoxTopLeftBox ) + self.m_listBoxTopLeft.Bind( wx.EVT_LISTBOX_DCLICK, self.OnListBoxTopLeftDClick ) + self.m_listBoxMidLeft.Bind( wx.EVT_LISTBOX, self.OnListMidLeftBoxClick ) + self.m_listBoxMidLeft.Bind( wx.EVT_LISTBOX_DCLICK, self.OnListMidLeftBoxDClick ) + self.m_listBoxMidRight.Bind( wx.EVT_LISTBOX, self.OnListMidRightBoxClick ) + self.m_listBoxMidRight.Bind( wx.EVT_LISTBOX_DCLICK, self.OnListMidRightBoxDClick ) + self.m_listBoxBottomLeft.Bind( wx.EVT_LISTBOX, self.OnListBoxBottomLeftClick ) + self.m_listBoxBottomLeft.Bind( wx.EVT_LISTBOX_DCLICK, self.OnListBoxBottomLeftDClick ) + self.m_listBoxBottomRight.Bind( wx.EVT_LISTBOX, self.OnListBoxBottomRIghtClick ) + self.m_listBoxBottomRight.Bind( wx.EVT_LISTBOX_DCLICK, self.OnListBoxBottomRIghtDClick ) + self.m_btnLeft.Bind( wx.EVT_BUTTON, self.OnBtnLeft ) + self.m_btnRight.Bind( wx.EVT_BUTTON, self.OnBtnRight ) + self.m_button1.Bind( wx.EVT_BUTTON, self.OnExitClick ) + + def __del__( self ): + pass + + + # Virtual event handlers, overide them in your derived class + def OnCloseFrame( self, event ): + event.Skip() + + def OnExitClick( self, event ): + event.Skip() + + def OnListBoxTopLeftBox( self, event ): + event.Skip() + + def OnListBoxTopLeftDClick( self, event ): + event.Skip() + + def OnListMidLeftBoxClick( self, event ): + event.Skip() + + def OnListMidLeftBoxDClick( self, event ): + event.Skip() + + def OnListMidRightBoxClick( self, event ): + event.Skip() + + def OnListMidRightBoxDClick( self, event ): + event.Skip() + + def OnListBoxBottomLeftClick( self, event ): + event.Skip() + + def OnListBoxBottomLeftDClick( self, event ): + event.Skip() + + def OnListBoxBottomRIghtClick( self, event ): + event.Skip() + + def OnListBoxBottomRIghtDClick( self, event ): + event.Skip() + + def OnBtnLeft( self, event ): + event.Skip() + + def OnBtnRight( self, event ): + event.Skip() + + + diff --git a/fdmdv2/tests/pa_cppbinding_test/gui.xrc b/fdmdv2/tests/pa_cppbinding_test/gui.xrc new file mode 100644 index 00000000..67b45ae9 --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/gui.xrc @@ -0,0 +1,223 @@ + + + + + 651,445 + Test PortAudio CPP Binding + 1 + 0 + + + + + + + + + + + + + + wxVERTICAL + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxEXPAND + 1 + + wxVERTICAL + + + + wxALIGN_CENTER|wxALL|wxEXPAND + 3 + + + + + + + + + wxEXPAND + 1 + + wxVERTICAL + + + + wxALIGN_CENTER|wxALL|wxEXPAND + 3 + + + #f4f7fc + + 0 + + + + + + + + + wxEXPAND + 1 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxEXPAND + 1 + + wxVERTICAL + + + wxALIGN_CENTER|wxALL|wxEXPAND + 5 + + + + + + + + + wxEXPAND + 5 + + wxVERTICAL + + + wxALIGN_CENTER|wxALL|wxEXPAND + 5 + + + + + + + + + + + wxEXPAND + 1 + + wxHORIZONTAL + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALIGN_CENTER|wxALL|wxEXPAND + 5 + + + + + + + + + wxEXPAND + 5 + + 65,65 + wxHORIZONTAL + + + wxALIGN_CENTER|wxALL|wxEXPAND + 5 + + + + + + + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALIGN_BOTTOM|wxALIGN_RIGHT + 1 + + wxHORIZONTAL + + + + 1 + + wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 1 + + + 0 + + + + + + + + 1 + + wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 1 + + + 0 + + + + + + + + + + + wxALIGN_BOTTOM|wxALIGN_RIGHT + 1 + + wxVERTICAL + + + + 1 + + + 1 + + + + + + + + + 1 + + + diff --git a/fdmdv2/tests/pa_cppbinding_test/libportaudio-2.dll b/fdmdv2/tests/pa_cppbinding_test/libportaudio-2.dll new file mode 100644 index 00000000..302e6635 Binary files /dev/null and b/fdmdv2/tests/pa_cppbinding_test/libportaudio-2.dll differ diff --git a/fdmdv2/tests/pa_cppbinding_test/libportaudiocpp-0.dll b/fdmdv2/tests/pa_cppbinding_test/libportaudiocpp-0.dll new file mode 100644 index 00000000..eae7e694 Binary files /dev/null and b/fdmdv2/tests/pa_cppbinding_test/libportaudiocpp-0.dll differ diff --git a/fdmdv2/tests/pa_cppbinding_test/main.cpp b/fdmdv2/tests/pa_cppbinding_test/main.cpp new file mode 100644 index 00000000..26dd162d --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/main.cpp @@ -0,0 +1,351 @@ +/********************************************************************* + * Name: main.cpp + * Purpose: Implements simple wxWidgets application with GUI + * created using wxFormBuilder. + * Author: + * Created: + * Copyright: + * License: wxWidgets license (www.wxwidgets.org) + * + * Notes: Note that all GUI creation code is implemented in + * gui.cpp source file which is generated by wxFormBuilder. + *********************************************************************/ + +#include "main.h" + +// initialize the application +IMPLEMENT_APP(MainApp); + +//////////////////////////////////////////////////////////////////////////////// +// application class implementation +//////////////////////////////////////////////////////////////////////////////// + +bool MainApp::OnInit() +{ + SetTopWindow(new MainFrame(NULL)); + GetTopWindow()->Show(); + + // true = enter the main loop + return true; +} + +//////////////////////////////////////////////////////////////////////////////// +// main application frame implementation +//////////////////////////////////////////////////////////////////////////////// + +MainFrame::MainFrame(wxWindow *parent) : MainFrameBase(parent) +{ +} + +MainFrame::~MainFrame() +{ +} + +void MainFrame::OnCloseFrame(wxCloseEvent& event) +{ + Destroy(); +} + +void MainFrame::OnExitClick(wxCommandEvent& event) +{ + Destroy(); +} + +void MainFrame::OnComboLeft( wxCommandEvent& event ) +{ + event.Skip(); +} + +void MainFrame::OnComboRight( wxCommandEvent& event ) +{ + event.Skip(); +} + +void MainFrame::OnScroll( wxScrollEvent& event ) +{ + event.Skip(); +} + +void MainFrame::OnBtnLeft( wxCommandEvent& event ) +{ + populateAudioInfo(); + event.Skip(); +} + +void MainFrame::OnBtnRight( wxCommandEvent& event ) +{ + event.Skip(); +} + +void MainFrame::populateStandardSampleRates( + wxListBox* target, + const portaudio::DirectionSpecificStreamParameters &inputParameters, + const portaudio::DirectionSpecificStreamParameters &outputParameters) +{ + static double STANDARD_SAMPLE_RATES[] = { + 8000.0, + 9600.0, + 11025.0, + 12000.0, + 16000.0, + 22050.0, + 24000.0, + 32000.0, + 44100.0, + 48000.0, + 88200.0, + 96000.0, + 192000.0, + -1 + }; // negative terminated list + + int printCount = 0; + wxString tStr; + + for (int i = 0; STANDARD_SAMPLE_RATES[i] > 0; ++i) + { + portaudio::StreamParameters tmp = portaudio::StreamParameters(inputParameters, outputParameters, STANDARD_SAMPLE_RATES[i], 0, paNoFlag); + if (tmp.isSupported()) + { + tStr.Printf("%8.2f", STANDARD_SAMPLE_RATES[i]); + if (printCount == 0) + { + target->InsertItems(1, &tStr, 0); + printCount = 1; + } + else if (printCount == 4) + { + target->InsertItems(1, &tStr, 0); + printCount = 1; + } + else + { + target->InsertItems(1, &tStr, 0); + ++printCount; + } + } + } + if (printCount == 0) + { + //std::cout << "None" << std::endl; + tStr = "None\n"; + target->InsertItems(1, &tStr, 0); + } + +/* + else + { + std::cout << std::endl; + } +*/ +} + +int MainFrame::populateAudioInfo() +{ + wxString tStr; + wxString ttStr; + try + { + portaudio::AutoSystem autoSys; + portaudio::System &sys = portaudio::System::instance(); + + tStr.Printf("PortAudio version number: %i\n", sys.version()); + m_textTopRight->AppendText(tStr); + + tStr.Printf("PortAudio version number: %s\n", sys.versionText()); + m_textTopRight->AppendText(tStr); + + int numDevices = sys.deviceCount(); + tStr.Printf("Number of devices: %i\n\n", numDevices); + m_textTopRight->AppendText(tStr); + + for (portaudio::System::DeviceIterator i = sys.devicesBegin(); i != sys.devicesEnd(); ++i) + { + tStr.Printf("---------- device #: %i ----------\n", (*i).index()); + m_textTopRight->AppendText(tStr); + + bool defaultDisplayed = false; + + if ((*i).isSystemDefaultInputDevice()) + { + tStr.Printf("[ System Default Input %s", (*i).hostApi().name()); + m_textTopRight->AppendText(tStr); + defaultDisplayed = true; + } + else if ((*i).isHostApiDefaultInputDevice()) + { + tStr.Printf("[ HostApi Default %s Input", (*i).hostApi().name()); + m_textTopRight->AppendText(tStr); + defaultDisplayed = true; + } + if ((*i).isSystemDefaultOutputDevice()) + { + tStr.Printf(defaultDisplayed ? "," : "["); + m_textTopRight->AppendText(tStr); + tStr = (" System Default Output"); + m_textTopRight->AppendText(tStr); + defaultDisplayed = true; + } + else if ((*i).isHostApiDefaultOutputDevice()) + { + tStr.Printf(defaultDisplayed ? "," : "["); + m_textTopRight->AppendText(tStr); + tStr.Printf(" HostApi Default %s Output", (*i).hostApi().name()); + m_textTopRight->AppendText(tStr); + defaultDisplayed = true; + } + + if (defaultDisplayed) + { + tStr = " ]\n"; + m_textTopRight->AppendText(tStr); + } + + ttStr.Printf("Name : %s\n", (*i).name()); + tStr += ttStr; + ttStr.Printf("Host API : %s\n", (*i).hostApi().name()); + tStr += ttStr; + ttStr.Printf("Max inputs : %i\n", (*i).maxInputChannels()); + tStr += ttStr; + ttStr.Printf("Max outputs : %i\n\n", (*i).maxOutputChannels()); + tStr += ttStr; + + ttStr.Printf("Default low input latency : %8.3f\n", (*i).defaultLowInputLatency()); + tStr += ttStr; + ttStr.Printf("Default low output latency : %8.3f\n", (*i).defaultLowOutputLatency()); + tStr += ttStr; + ttStr.Printf("Default high input latency : %8.3f\n", (*i).defaultHighInputLatency()); + tStr += ttStr; + ttStr.Printf("Default high output latency : %8.3f\n\n", (*i).defaultHighOutputLatency()); + tStr += ttStr; + m_textTopRight->AppendText(tStr); + +#ifdef WIN32_ASIO + // ASIO specific latency information: + if ((*i).hostApi().typeId() == paASIO) + { + portaudio::AsioDeviceAdapter asioDevice((*i)); + + //std::cout << "ASIO minimum buffer size = " << asioDevice.minBufferSize() << std::endl; + //std::cout << "ASIO maximum buffer size = " << asioDevice.maxBufferSize() << std::endl; + //std::cout << "ASIO preferred buffer size = " << asioDevice.preferredBufferSize() << std::endl; + + if (asioDevice.granularity() == -1) + { + //std::cout << "ASIO buffer granularity = power of 2" << std::endl; + } + else + { + //std::cout << "ASIO buffer granularity = " << asioDevice.granularity() << std::endl; + } + } +#endif // WIN32_ASIO + + tStr.Printf("Default sample rate : %8.2f\n", (*i).defaultSampleRate()); + m_textTopRight->AppendText(tStr); + + // Poll for standard sample rates: + portaudio::DirectionSpecificStreamParameters inputParameters((*i), (*i).maxInputChannels(), portaudio::INT16, true, 0.0, NULL); + portaudio::DirectionSpecificStreamParameters outputParameters((*i), (*i).maxOutputChannels(), portaudio::INT16, true, 0.0, NULL); + if (inputParameters.numChannels() > 0) + { + tStr = "Supported standard Input sample rates\n"; + m_listBoxTopLeft->InsertItems(1, &tStr, 0); + tStr.Printf(" for half-duplex 16 bit %i channel input = ", inputParameters.numChannels()); + m_listBoxTopLeft->InsertItems(1, &tStr, 0); + populateStandardSampleRates(m_listBoxTopLeft, inputParameters, portaudio::DirectionSpecificStreamParameters::null()); + } + if (outputParameters.numChannels() > 0) + { + tStr = "Supported standard Output sample rates\n"; + m_listBoxMidLeft->InsertItems(1, &tStr, 0); + tStr.Printf(" for half-duplex 16 bit %i channel output = ", outputParameters.numChannels()); + m_listBoxMidLeft->InsertItems(1, &tStr, 0); + populateStandardSampleRates(m_listBoxMidLeft, portaudio::DirectionSpecificStreamParameters::null(), outputParameters); + } + if (inputParameters.numChannels() > 0 && outputParameters.numChannels() > 0) + { + tStr = "Supported full-duplex sample rates\n"; + m_listBoxMidRight->InsertItems(1, &tStr, 0); + tStr.Printf(" for full-duplex 16 bit %i channel input, %i", inputParameters.numChannels(), outputParameters.numChannels()); + m_listBoxMidRight->InsertItems(1, &tStr, 0); + populateStandardSampleRates(m_listBoxMidRight, inputParameters, outputParameters); + } + tStr.Printf("---------------------------------\n"); + m_textTopRight->AppendText(tStr); + } + } + catch (const portaudio::PaException &e) + { + tStr.Printf("A PortAudio error occured: %s\n", e.paErrorText()); + m_textTopRight->AppendText(tStr); + } + catch (const portaudio::PaCppException &e) + { + tStr.Printf("A PortAudioCpp error occured: %s\n", e.what()); + m_textTopRight->AppendText(tStr); + } + catch (const std::exception &e) + { + tStr.Printf("A generic exception occured: %s\n", e.what()); + m_textTopRight->AppendText(tStr); + } + catch (...) + { + tStr.Printf("An unknown exception occured.\n"); + m_textTopRight->AppendText(tStr); + } + return 0; +} + +void MainFrame::OnListBoxTopLeftBox( wxCommandEvent& event ) +{ + //wxMessageBox(wxT("Got OnListBoxTopLeftBox()"), wxT("Interface Test"), wxOK); +} + +void MainFrame::OnListBoxTopLeftDClick( wxCommandEvent& event ) +{ + wxMessageBox(wxT("Got OnListBoxTopLeftDClick()"), wxT("Interface Test"), wxOK); +} + +void MainFrame::OnListMidLeftBoxClick( wxCommandEvent& event ) +{ +// wxMessageBox(wxT("Got OnListMidLeftBoxClick()"), wxT("Interface Test"), wxOK); +} + +void MainFrame::OnListMidLeftBoxDClick( wxCommandEvent& event ) +{ + wxMessageBox(wxT("Got OnListMidLeftBoxDClick()"), wxT("Interface Test"), wxOK); +} + +void MainFrame::OnListMidRightBoxClick( wxCommandEvent& event ) +{ +// wxMessageBox(wxT("Got OnListMidRightBoxClick()"), wxT("Interface Test"), wxOK); +} + +void MainFrame::OnListMidRightBoxDClick( wxCommandEvent& event ) +{ + wxMessageBox(wxT("Got OnListMidRightBoxDClick()"), wxT("Interface Test"), wxOK); +} + +void MainFrame::OnListBoxBottomLeftClick( wxCommandEvent& event ) +{ +// wxMessageBox(wxT("Got OnListBoxBottomLeftClick()"), wxT("Interface Test"), wxOK); +} + +void MainFrame::OnListBoxBottomLeftDClick( wxCommandEvent& event ) +{ + wxMessageBox(wxT("Got OnListBoxBottomLeftDClick()"), wxT("Interface Test"), wxOK); +} + +void MainFrame::OnListBoxBottomRIghtClick( wxCommandEvent& event ) +{ +// wxMessageBox(wxT("Got OnListBoxBottomRIghtClick()"), wxT("Interface Test"), wxOK); +} + +void MainFrame::OnListBoxBottomRIghtDClick( wxCommandEvent& event ) +{ + wxMessageBox(wxT("Got OnListBoxBottomRIghtDClick()"), wxT("Interface Test"), wxOK); +} + + diff --git a/fdmdv2/tests/pa_cppbinding_test/main.h b/fdmdv2/tests/pa_cppbinding_test/main.h new file mode 100644 index 00000000..974b512d --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/main.h @@ -0,0 +1,76 @@ +/********************************************************************* + * Name: main.h + * Purpose: Declares simple wxWidgets application with GUI + * created using wxFormBuilder. + * Author: + * Created: + * Copyright: + * License: wxWidgets license (www.wxwidgets.org) + * + * Notes: Note that all GUI creation code is declared in + * gui.h source file which is generated by wxFormBuilder. + *********************************************************************/ +#ifndef __main__ +#define __main__ + +// main wxWidgets header file +#include +#include +#include "portaudiocpp/PortAudioCpp.hxx" +#ifdef WIN32 +#include "portaudiocpp/AsioDeviceAdapter.hxx" +#endif + +// gui classes generated by wxFormBuilder +#include "gui.h" + +//////////////////////////////////////////////////////////////////////////////// +// application class declaration +//////////////////////////////////////////////////////////////////////////////// + +class MainApp : public wxApp +{ + public: + virtual bool OnInit(); +}; + +// declare global static function wxGetApp() +DECLARE_APP(MainApp) + +//////////////////////////////////////////////////////////////////////////////// +// main application frame declaration +//////////////////////////////////////////////////////////////////////////////// + +class MainFrame : public MainFrameBase +{ + public: + MainFrame(wxWindow *parent); + virtual ~MainFrame(); + + protected: + // protected event handlers + virtual void OnCloseFrame(wxCloseEvent& event); + virtual void OnExitClick(wxCommandEvent& event); + void populateStandardSampleRates( + wxListBox* target, + const portaudio::DirectionSpecificStreamParameters &inputParameters, + const portaudio::DirectionSpecificStreamParameters &outputParameters); + int populateAudioInfo(); + void OnComboLeft( wxCommandEvent& event ); + void OnComboRight( wxCommandEvent& event ); + void OnScroll( wxScrollEvent& event ); + void OnBtnLeft( wxCommandEvent& event ); + void OnBtnRight( wxCommandEvent& event ); + void OnListBoxTopLeftBox( wxCommandEvent& event ); + void OnListBoxTopLeftDClick( wxCommandEvent& event ); + void OnListMidLeftBoxClick( wxCommandEvent& event ); + void OnListMidLeftBoxDClick( wxCommandEvent& event ); + void OnListMidRightBoxClick( wxCommandEvent& event ); + void OnListMidRightBoxDClick( wxCommandEvent& event ); + void OnListBoxBottomLeftClick( wxCommandEvent& event ); + void OnListBoxBottomLeftDClick( wxCommandEvent& event ); + void OnListBoxBottomRIghtClick( wxCommandEvent& event ); + void OnListBoxBottomRIghtDClick( wxCommandEvent& event ); +}; + +#endif //__main__ diff --git a/fdmdv2/tests/pa_cppbinding_test/pa_cppbinding_test.mk b/fdmdv2/tests/pa_cppbinding_test/pa_cppbinding_test.mk new file mode 100644 index 00000000..114619aa --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/pa_cppbinding_test.mk @@ -0,0 +1,114 @@ +## +## Auto Generated makefile by CodeLite IDE +## any manual changes will be erased +## +## Release +ProjectName :=pa_cppbinding_test +ConfigurationName :=Release +IntermediateDirectory :=./Release +OutDir := $(IntermediateDirectory) +WorkspacePath := "C:\Users\wittend\Projects\Radio\fdmdv2" +ProjectPath := "C:\Users\wittend\Projects\Radio\fdmdv2\pa_cppbinding_test" +CurrentFileName := +CurrentFilePath := +CurrentFileFullPath := +User :=wittend +Date :=6/18/2012 +CodeLitePath :="C:\Program Files\CodeLite" +LinkerName :=g++ +ArchiveTool :=ar rcus +SharedObjectLinkerName :=g++ -shared -fPIC +ObjectSuffix :=.o +DependSuffix :=.o.d +PreprocessSuffix :=.o.i +DebugSwitch :=-gstab +IncludeSwitch :=-I +LibrarySwitch :=-l +OutputSwitch :=-o +LibraryPathSwitch :=-L +PreprocessorSwitch :=-D +SourceSwitch :=-c +CompilerName :=g++ +C_CompilerName :=gcc +OutputFile :=$(IntermediateDirectory)/$(ProjectName) +Preprocessors :=$(PreprocessorSwitch)__WX__ +ObjectSwitch :=-o +ArchiveOutputSwitch := +PreprocessOnlySwitch :=-E +ObjectsFileList :="C:\Users\wittend\Projects\Radio\fdmdv2\pa_cppbinding_test\pa_cppbinding_test.txt" +PCHCompileFlags := +MakeDirCommand :=makedir +CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors) +C_CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors) +LinkOptions := -mwindows -s $(shell wx-config --debug=no --libs --unicode=yes) +IncludePath := $(IncludeSwitch). $(IncludeSwitch)./ $(IncludeSwitch)C:/bin/MinGW/msys/1.0/local/include $(IncludeSwitch)./portaudiocpp +IncludePCH := +RcIncludePath := +Libs := $(LibrarySwitch)portaudiocpp-0 $(LibrarySwitch)portaudio-2 +LibPath := $(LibraryPathSwitch). $(LibraryPathSwitch). + + +## +## User defined environment variables +## +CodeLiteDir:=C:\Program Files\CodeLite +WXWIN:=C:\bin\wxWidgets-2.9.4 +PATH:=$(WXWIN)\lib\gcc_dll;$(PATH) +WXCFG:=gcc_dll\mswu +UNIT_TEST_PP_SRC_DIR:=C:\bin\UnitTest++-1.3 +Objects=$(IntermediateDirectory)/gui$(ObjectSuffix) $(IntermediateDirectory)/main$(ObjectSuffix) + +## +## Main Build Targets +## +.PHONY: all clean PreBuild PrePreBuild PostBuild +all: $(OutputFile) + +$(OutputFile): $(IntermediateDirectory)/.d $(Objects) + @$(MakeDirCommand) $(@D) + @echo "" > $(IntermediateDirectory)/.d + @echo $(Objects) > $(ObjectsFileList) + $(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions) + +$(IntermediateDirectory)/.d: + @$(MakeDirCommand) "./Release" + +PreBuild: + + +## +## Objects +## +$(IntermediateDirectory)/gui$(ObjectSuffix): gui.cpp $(IntermediateDirectory)/gui$(DependSuffix) + $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_cppbinding_test/gui.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/gui$(ObjectSuffix) $(IncludePath) +$(IntermediateDirectory)/gui$(DependSuffix): gui.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/gui$(ObjectSuffix) -MF$(IntermediateDirectory)/gui$(DependSuffix) -MM "C:/Users/wittend/Projects/Radio/fdmdv2/pa_cppbinding_test/gui.cpp" + +$(IntermediateDirectory)/gui$(PreprocessSuffix): gui.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/gui$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_cppbinding_test/gui.cpp" + +$(IntermediateDirectory)/main$(ObjectSuffix): main.cpp $(IntermediateDirectory)/main$(DependSuffix) + $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_cppbinding_test/main.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/main$(ObjectSuffix) $(IncludePath) +$(IntermediateDirectory)/main$(DependSuffix): main.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/main$(ObjectSuffix) -MF$(IntermediateDirectory)/main$(DependSuffix) -MM "C:/Users/wittend/Projects/Radio/fdmdv2/pa_cppbinding_test/main.cpp" + +$(IntermediateDirectory)/main$(PreprocessSuffix): main.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/main$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_cppbinding_test/main.cpp" + + +-include $(IntermediateDirectory)/*$(DependSuffix) +## +## Clean +## +clean: + $(RM) $(IntermediateDirectory)/gui$(ObjectSuffix) + $(RM) $(IntermediateDirectory)/gui$(DependSuffix) + $(RM) $(IntermediateDirectory)/gui$(PreprocessSuffix) + $(RM) $(IntermediateDirectory)/main$(ObjectSuffix) + $(RM) $(IntermediateDirectory)/main$(DependSuffix) + $(RM) $(IntermediateDirectory)/main$(PreprocessSuffix) + $(RM) $(OutputFile) + $(RM) $(OutputFile).exe + $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-release\pa_cppbinding_test" + + diff --git a/fdmdv2/tests/pa_cppbinding_test/pa_cppbinding_test.project b/fdmdv2/tests/pa_cppbinding_test/pa_cppbinding_test.project new file mode 100644 index 00000000..6728a3af --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/pa_cppbinding_test.project @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + diff --git a/fdmdv2/tests/pa_cppbinding_test/pa_cppbinding_test.txt b/fdmdv2/tests/pa_cppbinding_test/pa_cppbinding_test.txt new file mode 100644 index 00000000..8e987060 --- /dev/null +++ b/fdmdv2/tests/pa_cppbinding_test/pa_cppbinding_test.txt @@ -0,0 +1 @@ +./Release/gui.o ./Release/main.o diff --git a/fdmdv2/tests/pa_enum/Debug/pa_enum.exe b/fdmdv2/tests/pa_enum/Debug/pa_enum.exe new file mode 100644 index 00000000..f2c76996 Binary files /dev/null and b/fdmdv2/tests/pa_enum/Debug/pa_enum.exe differ diff --git a/fdmdv2/tests/pa_enum/Release/.d b/fdmdv2/tests/pa_enum/Release/.d new file mode 100644 index 00000000..950b4681 --- /dev/null +++ b/fdmdv2/tests/pa_enum/Release/.d @@ -0,0 +1 @@ +"" diff --git a/fdmdv2/tests/pa_enum/Release/libportaudio-2.dll b/fdmdv2/tests/pa_enum/Release/libportaudio-2.dll new file mode 100644 index 00000000..302e6635 Binary files /dev/null and b/fdmdv2/tests/pa_enum/Release/libportaudio-2.dll differ diff --git a/fdmdv2/tests/pa_enum/Release/libportaudiocpp-0.dll b/fdmdv2/tests/pa_enum/Release/libportaudiocpp-0.dll new file mode 100644 index 00000000..eae7e694 Binary files /dev/null and b/fdmdv2/tests/pa_enum/Release/libportaudiocpp-0.dll differ diff --git a/fdmdv2/tests/pa_enum/Release/pa_enum.exe b/fdmdv2/tests/pa_enum/Release/pa_enum.exe new file mode 100644 index 00000000..f38b510e Binary files /dev/null and b/fdmdv2/tests/pa_enum/Release/pa_enum.exe differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/blank.ico b/fdmdv2/tests/pa_enum/bitmaps/blank.ico new file mode 100644 index 00000000..accc4cc8 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/blank.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/inArrow.ICO b/fdmdv2/tests/pa_enum/bitmaps/inArrow.ICO new file mode 100644 index 00000000..cc7c9176 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/inArrow.ICO differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/inArrow16x16.ico b/fdmdv2/tests/pa_enum/bitmaps/inArrow16x16.ico new file mode 100644 index 00000000..6ed297b4 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/inArrow16x16.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/inArrow32x32.ico b/fdmdv2/tests/pa_enum/bitmaps/inArrow32x32.ico new file mode 100644 index 00000000..ffc748e9 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/inArrow32x32.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/outArrow.ICO b/fdmdv2/tests/pa_enum/bitmaps/outArrow.ICO new file mode 100644 index 00000000..b8b46ea5 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/outArrow.ICO differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/outArrow16x16.ico b/fdmdv2/tests/pa_enum/bitmaps/outArrow16x16.ico new file mode 100644 index 00000000..dffb649e Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/outArrow16x16.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/outArrow16x16.xpm b/fdmdv2/tests/pa_enum/bitmaps/outArrow16x16.xpm new file mode 100644 index 00000000..9a33ea53 --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/outArrow16x16.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static char * outArrow16x16_xpm[] = { +"16 16 4 1", +" c None", +". c #C0C0C0", +"+ c #808080", +"@ c #000000", +" ", +" ", +" . ", +" .. ", +" ... ", +" .... ", +".............. ", +"+.............. ", +"+++.............", +"++++@@@@@@@@@@@@", +"+++@@@@@@@@@@@@@", +"++@@@@@@@@@@@@@ ", +" @@@@ ", +" @@@ ", +" @@ ", +" @ "}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/outArrow32x32.ico b/fdmdv2/tests/pa_enum/bitmaps/outArrow32x32.ico new file mode 100644 index 00000000..42f8e3a2 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/outArrow32x32.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/sample.ico b/fdmdv2/tests/pa_enum/bitmaps/sample.ico new file mode 100644 index 00000000..435cca24 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/sample.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/small1.ico b/fdmdv2/tests/pa_enum/bitmaps/small1.ico new file mode 100644 index 00000000..4cac633c Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/small1.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/small1.xpm b/fdmdv2/tests/pa_enum/bitmaps/small1.xpm new file mode 100644 index 00000000..650f1b1e --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/small1.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static const char *const small1_xpm[] = { +/* columns rows colors chars-per-pixel */ +"16 16 6 1", +". c Black", +"o c #FFFFFF", +"X c #000080", +"O c #FFFF00", +" c None", +"+ c #FF0000", +/* pixels */ +" ", +" ", +" ", +" ....... ", +" .XXXXX. ", +" .oXXXX. ", +" .oXXX.......", +".....oXXX.OOOOO.", +".+++.XXXX.oOOOO.", +".o++......oOOOO.", +".o++++. .oOOOO.", +".o++++. .OOOOO.", +".+++++. .......", +"....... ", +" ", +" " +}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolbrai.ico b/fdmdv2/tests/pa_enum/bitmaps/toolbrai.ico new file mode 100644 index 00000000..99069f7c Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/toolbrai.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolbrai.xpm b/fdmdv2/tests/pa_enum/bitmaps/toolbrai.xpm new file mode 100644 index 00000000..7dc20afc --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/toolbrai.xpm @@ -0,0 +1,42 @@ +/* XPM */ +static const char *const toolbrai_xpm[] = { +/* width height ncolors chars_per_pixel */ +"32 32 4 1", +/* colors */ +" s None c None", +". c #000080", +"+ c #ff0000", +"@ c #00ffff", +/* pixels */ +" ", +" ", +" ..... ", +" ..... .+++++. ", +" .+++++. .+++++. ", +" .+++++++. .+++++. ", +" .+++++. ..... ", +" ..... @ ", +" @ @ ", +" @ @ ", +" @ @ ", +" @ ..... ", +" ..+++++.. ", +" .+++++++++. ", +" .+++++++++. ", +" .+++++++++. ", +" @..+++++.. ", +" @ .....@ ", +" @ @ @ ", +" @ @ @ ...... ", +" @ @ @.++++++. ", +" @ @ .++++++. ", +" @ @ .++++++. ", +" ...... @ .++++++. ", +" .++++++. @ ...... ", +" .++++++. .... ", +" .++++++. .++++. ", +" .++++++. .++++. ", +" ...... .++++. ", +" .++++. ", +" .... ", +" "}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolchar.ico b/fdmdv2/tests/pa_enum/bitmaps/toolchar.ico new file mode 100644 index 00000000..cec94e6b Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/toolchar.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolchar.xpm b/fdmdv2/tests/pa_enum/bitmaps/toolchar.xpm new file mode 100644 index 00000000..0f1ac793 --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/toolchar.xpm @@ -0,0 +1,42 @@ +/* XPM */ +static const char *const toolchar_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 4 1", +". c Black", +"X c #FFFF00", +" c None", +"o c #C00000", +/* pixels */ +" ", +" ..... ", +" ...XXXXX... ", +" ..XXXXXXXXXXX.. ", +" .XXXXXXXXXXXXXXX. ", +" ..XXXXXXXXXXXXXXXXX.. ", +" .XXXXXXXXXXXXXXXXXXXX. ", +" .XXXXXX.XXXXXXX.XXXXXX. ", +" .XXXXXX.X.XXXXX.X.XXXXXX. ", +" .XXXXX.XXX.XXX.XXX.XXXXXX. ", +" .XXXXX.XXXXXXXXXXXXX.XXXXX. ", +" .XXXXXXXX.XXXXXXX.XXXXXXXX. ", +" .XXXXXXXX.XXXXXXX.XXXXXXXX. ", +" .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ", +" .XXXXXXX.XXXXXXXXXXX.XXXXXXX. ", +" .XXXXXX...XXXXXXX...XXXXXX. ", +" .XXXXXX.oo..XXX..oo.XXXXXX. ", +" .XXXXXXX.ooo...ooo.XXXXXXX. ", +" .XXXXXXX.ooooooo.XXXXXXXX. ", +" .XXXXXXXX..ooo..XXXXXXXX. ", +" .XXXXXXXXX...XXXXXXXXX. ", +" .XXXXXXXXXXXXXXXXXXXX. ", +" ..XXXXXXXXXXXXXXXXX.. ", +" .XXXXXXXXXXXXXXX. ", +" ..XXXXXXXXXXX.. ", +" ...XXXXX... ", +" ..... ", +" ", +" " +}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolchec.ico b/fdmdv2/tests/pa_enum/bitmaps/toolchec.ico new file mode 100644 index 00000000..1989d57e Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/toolchec.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolchec.xpm b/fdmdv2/tests/pa_enum/bitmaps/toolchec.xpm new file mode 100644 index 00000000..90951a72 --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/toolchec.xpm @@ -0,0 +1,54 @@ +/* XPM */ +static const char *const toolchec_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 16 1", +"X c Black", +". c #4B4B4B", +"% c #696969", +": c #353535", +"o c #181818", +"O c #CCCCCC", +"@ c #0B0B0B", +" c None", +"+ c #292929", +"= c #383838", +"; c #747474", +"# c #8B8B8B", +"& c #A9A9A9", +"- c #575757", +"* c #B2B2B2", +"$ c #959595", +/* pixels */ +" ", +" ", +" .XX ", +" oXXO ", +" .XX+ ", +" oXX@# ", +" oXX@ ", +" oXX# ", +" @XX$ ", +" oXX$ ", +" oXX. ", +" +XXX ", +" %XXX ", +" &XXX* ", +" .XXX= ", +" XXXo ", +" . @XXX ", +" -XXo +XXX. ", +" XXXXX; $XXXX ", +" .+XXXXX XXXX. ", +" +XXXX= XXXX= ", +" @XXXX *XXXX ", +" XXXX$XXXX$ ", +" +XXXXXXXX ", +" XXXXXXX. ", +" oXXXXX: ", +" ;XXXXX. ", +" XXXX# ", +" @XX ", +" = ", +" ", +" " +}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/tooldata.ico b/fdmdv2/tests/pa_enum/bitmaps/tooldata.ico new file mode 100644 index 00000000..ed7ebbe5 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/tooldata.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/tooldata.xpm b/fdmdv2/tests/pa_enum/bitmaps/tooldata.xpm new file mode 100644 index 00000000..d8f7d4c8 --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/tooldata.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const tooldata_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 3 1", +" c Black", +"X c #FFFFFF", +". c #C0C0C0", +/* pixels */ +" ", +" ", +" ............................ ", +" ............................ ", +" .. .. .. .. ", +" .. .. .. .. ", +" ............................ ", +" ............................ ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XX XX XX XX ", +" XX XX XX XX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XX XX XX XX ", +" XX XX XX XX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XX XX XX XX ", +" XX XX XX XX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XX XX XX XX ", +" XX XX XX XX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XX XX XX XX ", +" XX XX XX XX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" ", +" " +}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolgame.ico b/fdmdv2/tests/pa_enum/bitmaps/toolgame.ico new file mode 100644 index 00000000..b3d6190b Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/toolgame.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolgame.xpm b/fdmdv2/tests/pa_enum/bitmaps/toolgame.xpm new file mode 100644 index 00000000..7488bd8c --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/toolgame.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const toolgame_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 3 1", +"X c #808080", +" c None", +". c #FF0000", +/* pixels */ +" ", +" ", +" ", +" ", +" .. ", +" .... ", +" ...... ", +" ........ ", +" .......... ", +" ............ ", +" .............. ", +" ................ ", +" .................. ", +" .................... ", +" ...................... ", +" ........................ ", +" .......................... ", +" ........................X ", +" ......................X ", +" ....................X ", +" ..................X ", +" ................X ", +" ..............X ", +" ............X ", +" ..........X ", +" ........X ", +" ......X ", +" ....X ", +" ..X ", +" ", +" ", +" " +}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolnote.ico b/fdmdv2/tests/pa_enum/bitmaps/toolnote.ico new file mode 100644 index 00000000..ff0ec28b Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/toolnote.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolnote.xpm b/fdmdv2/tests/pa_enum/bitmaps/toolnote.xpm new file mode 100644 index 00000000..e86035cb --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/toolnote.xpm @@ -0,0 +1,43 @@ +/* XPM */ +static const char *const toolnote_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 5 1", +"O c Black", +"o c #FFFFFF", +". c #808080", +" c None", +"X c #C0C0C0", +/* pixels */ +" ", +" ", +" ", +" . . . . . ", +" XXX.XX.XX.XX.XX.XXX ", +" Xoo.oo.oo.oo.oo.ooX ", +" XoooooooooooooooooX. ", +" XooOOO..OOOO.OOOooX. ", +" XoooooooooooooooooX. ", +" XoooooooooooooooooX. ", +" XooOOOOOOoooooooooX. ", +" XoooooooooooooooooX. ", +" XoooooooooooooooooX. ", +" XooOOO.OOOOOOOooooX. ", +" XoooooooooooooooooX. ", +" XoooooooooooooooooX. ", +" XooOOOOOO.OOOoooooX. ", +" XoooooooooooooooooX. ", +" XoooooooooooooooooX. ", +" XooOO.OOOO.OOOOOooX. ", +" XoooooooooooooooooX. ", +" XoooooooooooooooooX. ", +" XooOOO.OOOOO.OOOOoX. ", +" XoooooooooooooooooX. ", +" XoooooooooooooooooX. ", +" XoooooooooooooooooX. ", +" XXXXXXXXXXXXXXXXXXX. ", +" .................. ", +" ", +" ", +" ", +" " +}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/tooltime.ico b/fdmdv2/tests/pa_enum/bitmaps/tooltime.ico new file mode 100644 index 00000000..141bcaa5 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/tooltime.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/tooltime.xpm b/fdmdv2/tests/pa_enum/bitmaps/tooltime.xpm new file mode 100644 index 00000000..f75477d9 --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/tooltime.xpm @@ -0,0 +1,42 @@ +/* XPM */ +static const char *const tooltime_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 4 1", +". c Black", +"o c #FFFFFF", +" c None", +"X c #C0C0C0", +/* pixels */ +" ", +" ", +" ", +" ", +" ..... ", +" ...XX.oo... ", +" .XXXoo.ooooo. ", +" ..Xoooooooooooo.. ", +" .Xoooooo.ooooooo. ", +" .Xooooooo.Xooooooo. ", +" .Xoooooooo.Xoooooooo. ", +" .Xoooooooo.Xoooooooo. ", +" .Xoooooooo.Xoooooooo. ", +" .Xooooooooo.Xooooooooo. ", +" .Xooooooooo.Xooooooooo.X ", +" ...oo.......Xooooooo...X ", +" .oooooXXXXXXXooooooooo.X ", +" .ooooooooooooooooooooo.X ", +" .ooooooooooooooooooo.XX ", +" .ooooooooooooooooooo.XX ", +" .ooooooooooooooooooo.X ", +" .ooooooooooooooooo.XX ", +" .ooooooooooooooo.XX ", +" ..ooooooooooooo..X ", +" .ooooo.ooooo.XX ", +" ...oo.oo...XX ", +" XX.....XXXX ", +" XXXXXXX ", +" ", +" ", +" ", +" " +}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/tooltodo.ico b/fdmdv2/tests/pa_enum/bitmaps/tooltodo.ico new file mode 100644 index 00000000..6b93a945 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/tooltodo.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/tooltodo.xpm b/fdmdv2/tests/pa_enum/bitmaps/tooltodo.xpm new file mode 100644 index 00000000..9ba1e31a --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/tooltodo.xpm @@ -0,0 +1,194 @@ +/* XPM */ +static const char *const tooltodo_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 156 2", +"0 c #A08020", +"+. c #D0C066", +"q c #A08022", +"T c #98752D", +"6. c #D0C072", +"w c #A88B28", +"@. c #987540", +"l c #A08037", +"~ c #A0803F", +"4. c #A08048", +"7 c #808080", +"m c #704012", +"P c #704013", +"] c #704014", +"B c #704016", +"{ c #704017", +":. c #704019", +"k c #70401B", +"A c #70401C", +"W c #70401D", +".. c #70401E", +"F c #70401F", +"1. c #704020", +"H c #704022", +"s c #EFEA37", +") c #704024", +"5. c #704025", +"} c #784B1E", +"z c #784B22", +"2. c #784B26", +"/ c #784B28", +"Y c #EFEA55", +"N c #E0D547", +"D c #EFEA6C", +"X. c #EFEA70", +"o. c #EFEA74", +"R c #E0D554", +"| c #E0D558", +"#. c #EFEA83", +"y c #E8E05D", +"3. c #E0D570", +"x c #E8E069", +"G c #BFAA57", +"J c #BFAA5D", +">. c #B0953D", +" c None", +"<. c #B8A04D", +"^ c #B8A052", +"X c #FFFF30", +"o c #FFFF34", +"O c #FFFF38", +"+ c #FFFF3C", +"b c #FFFF40", +"@ c #FFFF41", +"' c #FFFF43", +"n c #FFFF44", +"# c #FFFF45", +"*. c #FFFF47", +"L c #FFFF48", +"$ c #FFFF49", +"8. c #FFFF4B", +"M c #FFFF4C", +"V c #906B27", +"% c #FFFF4D", +"p. c #FFFF4F", +"I c #FFFF50", +"& c #FFFF51", +"a. c #FFFF53", +"U c #FFFF54", +"e c #FFFF55", +"* c #FFFF56", +"g. c #FFFF57", +"[ c #FFFF58", +"r c #FFFF59", +"= c #FFFF5A", +"l. c #FFFF5B", +". c #C0C0C0", +"-. c #FFFF5C", +"j c #FFFF5D", +"- c #FFFF5E", +"b. c #FFFF5F", +"9. c #FFFF60", +"C c #FFFF61", +"; c #FFFF62", +"n. c #FFFF63", +"0. c #FFFF64", +": c #FFFF66", +"N. c #FFFF67", +"s. c #FFFF68", +"E c #FFFF69", +"Z c #FFFF6A", +"> c #FFFF6B", +"h. c #FFFF6C", +" . c #FFFF6D", +"u c #FFFF6E", +", c #FFFF6F", +"z. c #FFFF70", +",. c #FFFF71", +"S c #FFFF72", +"< c #FFFF73", +"x. c #FFFF74", +"q. c #FFFF75", +"Q c #FFFF76", +"f c #602B0B", +"1 c #FFFF77", +"m. c #FFFF78", +"w. c #FFFF79", +"! c #FFFF7A", +"2 c #FFFF7B", +"B. c #FFFF7C", +"d. c #FFFF7D", +"e. c #FFFF7E", +"i c #FFFF7F", +"3 c #FFFF80", +"j. c #FFFF81", +"r. c #FFFF82", +"p c #FFFF83", +"4 c #FFFF84", +"c. c #FFFF85", +"k. c #FFFF86", +"c c #FFFF87", +"5 c #FFFF88", +"v. c #FFFF89", +"y. c #FFFF8A", +"( c #FFFF8B", +"6 c #FFFF8C", +"t. c #FFFF8D", +"u. c #FFFF8E", +"O. c #68361C", +"a c #FFFF90", +"V. c #FFFF91", +"f. c #FFFF92", +"$. c #68361F", +"_ c #FFFF93", +"v c #FFFF94", +"Z. c #FFFF95", +"M. c #FFFF96", +"%. c #FFFF97", +"K c #FFFF98", +"A. c #FFFF99", +"C. c #FFFF9A", +"7. c #FFFF9B", +"` c #FFFF9C", +"D. c #FFFF9D", +"S. c #FFFF9E", +"i. c #FFFF9F", +"&. c #FFFFA0", +"F. c #FFFFA1", +"8 c #D0C02A", +"d c #D0C030", +"g c #D0C036", +"h c #D0C03A", +";. c #C8B545", +"t c #C8B548", +"=. c #987527", +"9 c #A0801E", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" ", +" . . . . . . . . . . . . . . . . . . . . . . . . . ", +" . X o O + @ # $ % & * = - ; : > , < 1 2 3 4 5 6 . 7 ", +" . o 8 9 0 q w % & e r - ; t y u < 1 2 i p 5 6 a . 7 ", +" . O s d f g h & e r j ; : k l z x 2 i p c 6 a v . 7 ", +" . + b n m M & N B V C : Z A S D F i G H J a v K . 7 ", +" . b n L P I U B Y T R E u W Q ! ~ ^ / ( ) _ K ` . 7 ", +" . ' L M ] U [ { C } | .S ..X.o.O.+.@.#.$.%.` &.. 7 ", +" . *.M I =.[ -.;.:.>. .,.Q <.1.2.3.( 4.5.6.7.&.. . 7 ", +" . 8.I U [ -.9.0.E .,.q.w.e.r.t.y.u._ %.7.i.. . . 7 ", +" . p.a.[ -.9.0.s. .,.q.w.d.r.t.t.u.f.%.7.. . . o . 7 ", +" . a.g.-.9.0.s.h.,.q.w.d.j.k.y.t.. . . . . o o . 7 ", +" . g.l.9.0.s.h.z.x.w.d.j.c.v.u.f.. o o o o o . 7 ", +" . l.b.n.s.h.z.x.m.d.j.c.v.t.f.M.. o o o o . 7 ", +" . b.n.N.h.z.x.m.B.j.c.v.t.V.M.C.. o o o . 7 ", +" . n.N.> z.x.m.B.3 4 v.t.V.Z.A.S.. o o . 7 ", +" . N.> , < m.B.3 4 5 t.V.Z.A.D.. o o . 7 ", +" . > , < 1 B.3 4 5 6 V.Z.A.D.. . o . 7 ", +" . , < 1 2 3 4 5 6 a v A.D.F.. o . 7 ", +" . < 1 2 i p 5 6 a v K D.F.. o . 7 ", +" . . . . . . . . . . . . . . . 7 ", +" 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ", +" ", +" ", +" ", +" ", +" " +}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolword.ico b/fdmdv2/tests/pa_enum/bitmaps/toolword.ico new file mode 100644 index 00000000..a1a8838c Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/toolword.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/toolword.xpm b/fdmdv2/tests/pa_enum/bitmaps/toolword.xpm new file mode 100644 index 00000000..b2e96a12 --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/toolword.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const toolword_xpm[] = { +/* width height ncolors chars_per_pixel */ +"32 32 3 1", +/* colors */ +" s None c None", +". c #000000", +"+ c #ffffff", +/* pixels */ +" ", +" ", +" ........ ........ ", +" .++++++. ...........++++++. ", +" .++++++. .++++++++..++++++. ", +" ........ .++++++++......... ", +" .++++++++. ", +" .......... ", +" ", +" ", +" ", +" ..... ", +"...... ......... .+++. .........", +".++++. .+++++++. .+++. .+++++++.", +".++++. .+++++++. .+++. .+++++++.", +".++++. .+++++++. ..... .+++++++.", +"...... ......... .........", +" ", +" ", +" ", +" ", +" .......... ", +" .. .++++++++. ", +" .++. .++++++++. ", +" .++++. .++++++++. ", +" .++++. .......... ", +" ...........+++. ", +" .++++++++. .+. ", +" .++++++++. . ", +" .......... ", +" ", +" "}; diff --git a/fdmdv2/tests/pa_enum/bitmaps/transparent.ico b/fdmdv2/tests/pa_enum/bitmaps/transparent.ico new file mode 100644 index 00000000..eeba3067 Binary files /dev/null and b/fdmdv2/tests/pa_enum/bitmaps/transparent.ico differ diff --git a/fdmdv2/tests/pa_enum/bitmaps/transparent.xpm b/fdmdv2/tests/pa_enum/bitmaps/transparent.xpm new file mode 100644 index 00000000..01f4737d --- /dev/null +++ b/fdmdv2/tests/pa_enum/bitmaps/transparent.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static char * transparent_xpm[] = { +"32 32 1 1", +" c None", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/fdmdv2/tests/pa_enum/gui.cpp b/fdmdv2/tests/pa_enum/gui.cpp new file mode 100644 index 00000000..35cbda2b --- /dev/null +++ b/fdmdv2/tests/pa_enum/gui.cpp @@ -0,0 +1,321 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Mar 17 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "gui.h" + +/////////////////////////////////////////////////////////////////////////// + +MainFrameBase::MainFrameBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* mainSizer; + mainSizer = new wxBoxSizer( wxVERTICAL ); + + m_panel1 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer4; + bSizer4 = new wxBoxSizer( wxVERTICAL ); + + m_notebook1 = new wxNotebook( m_panel1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_BOTTOM ); + m_panelRx = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer20; + bSizer20 = new wxBoxSizer( wxVERTICAL ); + + wxGridSizer* gSizer4; + gSizer4 = new wxGridSizer( 2, 1, 0, 0 ); + + wxStaticBoxSizer* sbSizer2; + sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panelRx, wxID_ANY, _("Rx Radio Device") ), wxVERTICAL ); + + m_listCtrlRxInDevices = new wxListCtrl( m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); + sbSizer2->Add( m_listCtrlRxInDevices, 1, wxALL|wxEXPAND, 1 ); + + wxBoxSizer* bSizer811; + bSizer811 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText51 = new wxStaticText( m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText51->Wrap( -1 ); + bSizer811->Add( m_staticText51, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_textCtrlRxIn = new wxTextCtrl( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer811->Add( m_textCtrlRxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + + m_staticText6 = new wxStaticText( m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText6->Wrap( -1 ); + bSizer811->Add( m_staticText6, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_cbSampleRateRxIn = new wxComboBox( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN ); + bSizer811->Add( m_cbSampleRateRxIn, 0, wxALL, 1 ); + + + sbSizer2->Add( bSizer811, 0, wxEXPAND, 5 ); + + + gSizer4->Add( sbSizer2, 1, wxEXPAND, 5 ); + + wxStaticBoxSizer* sbSizer3; + sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( m_panelRx, wxID_ANY, _("Rx Speaker Stream") ), wxVERTICAL ); + + m_listCtrlRxOutDevices = new wxListCtrl( m_panelRx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); + sbSizer3->Add( m_listCtrlRxOutDevices, 1, wxALL|wxEXPAND, 1 ); + + wxBoxSizer* bSizer81; + bSizer81 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText9 = new wxStaticText( m_panelRx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText9->Wrap( -1 ); + bSizer81->Add( m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_textRxOut = new wxTextCtrl( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer81->Add( m_textRxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + + m_staticText10 = new wxStaticText( m_panelRx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText10->Wrap( -1 ); + bSizer81->Add( m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_cbSampleRateRxOut = new wxComboBox( m_panelRx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN ); + bSizer81->Add( m_cbSampleRateRxOut, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + + + sbSizer3->Add( bSizer81, 0, wxEXPAND, 2 ); + + + gSizer4->Add( sbSizer3, 1, wxEXPAND, 2 ); + + + bSizer20->Add( gSizer4, 1, wxEXPAND, 1 ); + + + m_panelRx->SetSizer( bSizer20 ); + m_panelRx->Layout(); + bSizer20->Fit( m_panelRx ); + m_notebook1->AddPage( m_panelRx, _("Receive"), true ); + m_panelTx = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer18; + bSizer18 = new wxBoxSizer( wxVERTICAL ); + + wxGridSizer* gSizer2; + gSizer2 = new wxGridSizer( 2, 1, 0, 0 ); + + wxStaticBoxSizer* sbSizer22; + sbSizer22 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Microphone Stream") ), wxVERTICAL ); + + m_listCtrlTxInDevices = new wxListCtrl( m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); + sbSizer22->Add( m_listCtrlTxInDevices, 1, wxALL|wxEXPAND, 1 ); + + wxBoxSizer* bSizer83; + bSizer83 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText12 = new wxStaticText( m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText12->Wrap( -1 ); + bSizer83->Add( m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_textCtrlTxIn = new wxTextCtrl( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer83->Add( m_textCtrlTxIn, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + + m_staticText11 = new wxStaticText( m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText11->Wrap( -1 ); + bSizer83->Add( m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_cbSampleRateTxIn = new wxComboBox( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN ); + bSizer83->Add( m_cbSampleRateTxIn, 0, wxALL, 1 ); + + + sbSizer22->Add( bSizer83, 0, wxEXPAND, 2 ); + + + gSizer2->Add( sbSizer22, 1, wxEXPAND, 5 ); + + wxStaticBoxSizer* sbSizer21; + sbSizer21 = new wxStaticBoxSizer( new wxStaticBox( m_panelTx, wxID_ANY, _("Tx Radio Stream") ), wxVERTICAL ); + + m_listCtrlTxOutDevices = new wxListCtrl( m_panelTx, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); + sbSizer21->Add( m_listCtrlTxOutDevices, 1, wxALL|wxEXPAND, 2 ); + + wxBoxSizer* bSizer82; + bSizer82 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText81 = new wxStaticText( m_panelTx, wxID_ANY, _("Device:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText81->Wrap( -1 ); + bSizer82->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_textCtrTxOut = new wxTextCtrl( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer82->Add( m_textCtrTxOut, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + + m_staticText71 = new wxStaticText( m_panelTx, wxID_ANY, _("Sample Rate:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText71->Wrap( -1 ); + bSizer82->Add( m_staticText71, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_cbSampleRateTxOut = new wxComboBox( m_panelTx, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN ); + bSizer82->Add( m_cbSampleRateTxOut, 0, wxALL, 1 ); + + + sbSizer21->Add( bSizer82, 0, wxEXPAND, 2 ); + + + gSizer2->Add( sbSizer21, 1, wxEXPAND, 5 ); + + + bSizer18->Add( gSizer2, 1, wxEXPAND, 1 ); + + + m_panelTx->SetSizer( bSizer18 ); + m_panelTx->Layout(); + bSizer18->Fit( m_panelTx ); + m_notebook1->AddPage( m_panelTx, _("Transmit"), false ); + m_panelAPI = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer12; + bSizer12 = new wxBoxSizer( wxHORIZONTAL ); + + wxGridSizer* gSizer31; + gSizer31 = new wxGridSizer( 2, 1, 0, 0 ); + + wxStaticBoxSizer* sbSizer1; + sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("PortAudio") ), wxVERTICAL ); + + wxGridSizer* gSizer3; + gSizer3 = new wxGridSizer( 4, 2, 0, 0 ); + + m_staticText7 = new wxStaticText( m_panelAPI, wxID_ANY, _("PortAudio Version String:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText7->Wrap( -1 ); + gSizer3->Add( m_staticText7, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1 ); + + wxBoxSizer* bSizer151; + bSizer151 = new wxBoxSizer( wxVERTICAL ); + + m_textStringVer = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); + bSizer151->Add( m_textStringVer, 0, wxALL|wxEXPAND, 1 ); + + + gSizer3->Add( bSizer151, 1, wxEXPAND, 2 ); + + m_staticText8 = new wxStaticText( m_panelAPI, wxID_ANY, _("PortAudio Int Version:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText8->Wrap( -1 ); + gSizer3->Add( m_staticText8, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 1 ); + + wxBoxSizer* bSizer13; + bSizer13 = new wxBoxSizer( wxVERTICAL ); + + m_textIntVer = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); + bSizer13->Add( m_textIntVer, 0, wxALL|wxALIGN_CENTER_VERTICAL, 1 ); + + + gSizer3->Add( bSizer13, 1, wxEXPAND, 5 ); + + m_staticText5 = new wxStaticText( m_panelAPI, wxID_ANY, _("Device Count:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText5->Wrap( -1 ); + gSizer3->Add( m_staticText5, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1 ); + + wxBoxSizer* bSizer14; + bSizer14 = new wxBoxSizer( wxVERTICAL ); + + m_textCDevCount = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 45,-1 ), wxTE_READONLY ); + m_textCDevCount->SetMaxSize( wxSize( 45,-1 ) ); + + bSizer14->Add( m_textCDevCount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + + + gSizer3->Add( bSizer14, 1, wxEXPAND, 5 ); + + m_staticText4 = new wxStaticText( m_panelAPI, wxID_ANY, _("API Count:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText4->Wrap( -1 ); + gSizer3->Add( m_staticText4, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 1 ); + + wxBoxSizer* bSizer15; + bSizer15 = new wxBoxSizer( wxVERTICAL ); + + m_textAPICount = new wxTextCtrl( m_panelAPI, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 45,-1 ), wxTE_READONLY ); + m_textAPICount->SetMaxSize( wxSize( 45,-1 ) ); + + bSizer15->Add( m_textAPICount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1 ); + + + gSizer3->Add( bSizer15, 1, wxEXPAND, 5 ); + + + sbSizer1->Add( gSizer3, 1, wxEXPAND, 2 ); + + + gSizer31->Add( sbSizer1, 1, wxEXPAND, 2 ); + + wxStaticBoxSizer* sbSizer6; + sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( m_panelAPI, wxID_ANY, _("Other") ), wxVERTICAL ); + + + gSizer31->Add( sbSizer6, 1, wxEXPAND, 5 ); + + + bSizer12->Add( gSizer31, 1, wxEXPAND, 5 ); + + + m_panelAPI->SetSizer( bSizer12 ); + m_panelAPI->Layout(); + bSizer12->Fit( m_panelAPI ); + m_notebook1->AddPage( m_panelAPI, _("API Info"), false ); + + bSizer4->Add( m_notebook1, 1, wxEXPAND | wxALL, 0 ); + + + m_panel1->SetSizer( bSizer4 ); + m_panel1->Layout(); + bSizer4->Fit( m_panel1 ); + mainSizer->Add( m_panel1, 1, wxEXPAND | wxALL, 1 ); + + wxBoxSizer* bSizer6; + bSizer6 = new wxBoxSizer( wxHORIZONTAL ); + + m_btnRefresh = new wxButton( this, wxID_ANY, _("Refresh"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer6->Add( m_btnRefresh, 0, wxALIGN_CENTER|wxALL, 2 ); + + m_sdbSizer1 = new wxStdDialogButtonSizer(); + m_sdbSizer1OK = new wxButton( this, wxID_OK ); + m_sdbSizer1->AddButton( m_sdbSizer1OK ); + m_sdbSizer1Apply = new wxButton( this, wxID_APPLY ); + m_sdbSizer1->AddButton( m_sdbSizer1Apply ); + m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL ); + m_sdbSizer1->AddButton( m_sdbSizer1Cancel ); + m_sdbSizer1->Realize(); + + bSizer6->Add( m_sdbSizer1, 1, wxALIGN_CENTER_VERTICAL, 2 ); + + + mainSizer->Add( bSizer6, 0, wxEXPAND, 2 ); + + + this->SetSizer( mainSizer ); + this->Layout(); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) ); + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) ); + m_listCtrlRxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxInDeviceSelect ), NULL, this ); + m_listCtrlRxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxOutDeviceSelect ), NULL, this ); + m_listCtrlTxInDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxInDeviceSelect ), NULL, this ); + m_listCtrlTxOutDevices->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxOutDeviceSelect ), NULL, this ); + m_btnRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnRefreshClick ), NULL, this ); + m_sdbSizer1Apply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnApplyAudioParameters ), NULL, this ); + m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnCancelAudioParameters ), NULL, this ); + m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnOkAudioParameters ), NULL, this ); +} + +MainFrameBase::~MainFrameBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_ACTIVATE_APP, wxActivateEventHandler( MainFrameBase::OnActivateApp ) ); + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) ); + m_listCtrlRxInDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxInDeviceSelect ), NULL, this ); + m_listCtrlRxOutDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnRxOutDeviceSelect ), NULL, this ); + m_listCtrlTxInDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxInDeviceSelect ), NULL, this ); + m_listCtrlTxOutDevices->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( MainFrameBase::OnTxOutDeviceSelect ), NULL, this ); + m_btnRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnRefreshClick ), NULL, this ); + m_sdbSizer1Apply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnApplyAudioParameters ), NULL, this ); + m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnCancelAudioParameters ), NULL, this ); + m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnOkAudioParameters ), NULL, this ); + +} diff --git a/fdmdv2/tests/pa_enum/gui.fbp b/fdmdv2/tests/pa_enum/gui.fbp new file mode 100644 index 00000000..4f69c823 --- /dev/null +++ b/fdmdv2/tests/pa_enum/gui.fbp @@ -0,0 +1,3488 @@ + + + + + + C++|Python|XRC + 1 + source_name + 0 + 0 + res + UTF-8 + connect + gui + 1000 + none + 1 + PA_Enum + + . + + 1 + 1 + 1 + 0 + 0 + + 1 + 1 + 1 + 1 + + 0 + + + + + + + 1 + wxBOTH + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + impl_virtual + + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + MainFrameBase + 1 + + + 1 + + Resizable + 1 + 790,400 + wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER + + PortAudio Device Enumeration + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + 1 + + OnActivateApp + + + + + + + + OnCloseFrame + + + + + + + + + + + + + + + + + + + + + + + + + + + + mainSizer + wxVERTICAL + none + + 1 + wxEXPAND | wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_panel1 + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer4 + wxVERTICAL + none + + 0 + wxEXPAND | wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_notebook1 + 1 + + + protected + 1 + + Resizable + 1 + + wxNB_BOTTOM + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Receive + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_panelRx + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer20 + wxVERTICAL + none + + 1 + wxEXPAND + 1 + + 1 + 0 + + gSizer4 + none + 2 + 0 + + 5 + wxEXPAND + 1 + + wxID_ANY + Rx Radio Device + + sbSizer2 + wxVERTICAL + none + + + 1 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_listCtrlRxInDevices + 1 + + + protected + 1 + + Resizable + 1 + + wxLC_HRULES|wxLC_REPORT|wxLC_VRULES + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnRxInDeviceSelect + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer811 + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Device: + + 0 + + + 0 + + 1 + m_staticText51 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlRxIn + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Sample Rate: + + 0 + + + 0 + + 1 + m_staticText6 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_cbSampleRateRxIn + 1 + + + protected + 1 + + Resizable + -1 + 1 + + wxCB_DROPDOWN + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxEXPAND + 1 + + wxID_ANY + Rx Speaker Stream + + sbSizer3 + wxVERTICAL + none + + + 1 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_listCtrlRxOutDevices + 1 + + + protected + 1 + + Resizable + 1 + + wxLC_HRULES|wxLC_REPORT|wxLC_VRULES + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnRxOutDeviceSelect + + + + + + + + + + + + + + + + + + 2 + wxEXPAND + 0 + + + bSizer81 + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Device: + + 0 + + + 0 + + 1 + m_staticText9 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textRxOut + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Sample Rate: + + 0 + + + 0 + + 1 + m_staticText10 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_cbSampleRateRxOut + 1 + + + protected + 1 + + Resizable + -1 + 1 + + wxCB_DROPDOWN + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Transmit + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_panelTx + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer18 + wxVERTICAL + none + + 1 + wxEXPAND + 1 + + 1 + 0 + + gSizer2 + none + 2 + 0 + + 5 + wxEXPAND + 1 + + wxID_ANY + Tx Microphone Stream + + sbSizer22 + wxVERTICAL + none + + + 1 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_listCtrlTxInDevices + 1 + + + protected + 1 + + Resizable + 1 + + wxLC_HRULES|wxLC_REPORT|wxLC_VRULES + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTxInDeviceSelect + + + + + + + + + + + + + + + + + + 2 + wxEXPAND + 0 + + + bSizer83 + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Device: + + 0 + + + 0 + + 1 + m_staticText12 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlTxIn + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Sample Rate: + + 0 + + + 0 + + 1 + m_staticText11 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_cbSampleRateTxIn + 1 + + + protected + 1 + + Resizable + -1 + 1 + + wxCB_DROPDOWN + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + wxID_ANY + Tx Radio Stream + + sbSizer21 + wxVERTICAL + none + + + 2 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_listCtrlTxOutDevices + 1 + + + protected + 1 + + Resizable + 1 + + wxLC_HRULES|wxLC_REPORT|wxLC_VRULES + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTxOutDeviceSelect + + + + + + + + + + + + + + + + + + 2 + wxEXPAND + 0 + + + bSizer82 + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Device: + + 0 + + + 0 + + 1 + m_staticText81 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrTxOut + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Sample Rate: + + 0 + + + 0 + + 1 + m_staticText71 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_cbSampleRateTxOut + 1 + + + protected + 1 + + Resizable + -1 + 1 + + wxCB_DROPDOWN + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + API Info + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_panelAPI + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer12 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + 1 + 0 + + gSizer31 + none + 2 + 0 + + 2 + wxEXPAND + 1 + + wxID_ANY + PortAudio + + sbSizer1 + wxVERTICAL + none + + + 2 + wxEXPAND + 1 + + 2 + 0 + + gSizer3 + none + 4 + 0 + + 1 + wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + PortAudio Version String: + + 0 + + + 0 + + 1 + m_staticText7 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxEXPAND + 1 + + + bSizer151 + wxVERTICAL + none + + 1 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textStringVer + 1 + + + protected + 1 + + Resizable + 1 + + wxTE_READONLY + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + PortAudio Int Version: + + 0 + + + 0 + + 1 + m_staticText8 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer13 + wxVERTICAL + none + + 1 + wxALL|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textIntVer + 1 + + + protected + 1 + + Resizable + 1 + + wxTE_READONLY + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Device Count: + + 0 + + + 0 + + 1 + m_staticText5 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer14 + wxVERTICAL + none + + 1 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + 45,-1 + 0 + + 0 + + 1 + m_textCDevCount + 1 + + + protected + 1 + + Resizable + 1 + 45,-1 + wxTE_READONLY + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + API Count: + + 0 + + + 0 + + 1 + m_staticText4 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer15 + wxVERTICAL + none + + 1 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + 45,-1 + 0 + + 0 + + 1 + m_textAPICount + 1 + + + protected + 1 + + Resizable + 1 + 45,-1 + wxTE_READONLY + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + wxID_ANY + Other + + sbSizer6 + wxVERTICAL + none + + + + + + + + + + + + + + + 2 + wxEXPAND + 0 + + + bSizer6 + wxHORIZONTAL + none + + 2 + wxALIGN_CENTER|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Refresh + + 0 + + + 0 + + 1 + m_btnRefresh + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnRefreshClick + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALIGN_CENTER_VERTICAL + 1 + + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + m_sdbSizer1 + protected + OnApplyAudioParameters + OnCancelAudioParameters + + + + OnOkAudioParameters + + + + + + + + + + diff --git a/fdmdv2/tests/pa_enum/gui.h b/fdmdv2/tests/pa_enum/gui.h new file mode 100644 index 00000000..d296ef6e --- /dev/null +++ b/fdmdv2/tests/pa_enum/gui.h @@ -0,0 +1,104 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Mar 17 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __GUI_H__ +#define __GUI_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class MainFrameBase +/////////////////////////////////////////////////////////////////////////////// +class MainFrameBase : public wxFrame +{ + private: + + protected: + wxPanel* m_panel1; + wxNotebook* m_notebook1; + wxPanel* m_panelRx; + wxListCtrl* m_listCtrlRxInDevices; + wxStaticText* m_staticText51; + wxTextCtrl* m_textCtrlRxIn; + wxStaticText* m_staticText6; + wxComboBox* m_cbSampleRateRxIn; + wxListCtrl* m_listCtrlRxOutDevices; + wxStaticText* m_staticText9; + wxTextCtrl* m_textRxOut; + wxStaticText* m_staticText10; + wxComboBox* m_cbSampleRateRxOut; + wxPanel* m_panelTx; + wxListCtrl* m_listCtrlTxInDevices; + wxStaticText* m_staticText12; + wxTextCtrl* m_textCtrlTxIn; + wxStaticText* m_staticText11; + wxComboBox* m_cbSampleRateTxIn; + wxListCtrl* m_listCtrlTxOutDevices; + wxStaticText* m_staticText81; + wxTextCtrl* m_textCtrTxOut; + wxStaticText* m_staticText71; + wxComboBox* m_cbSampleRateTxOut; + wxPanel* m_panelAPI; + wxStaticText* m_staticText7; + wxTextCtrl* m_textStringVer; + wxStaticText* m_staticText8; + wxTextCtrl* m_textIntVer; + wxStaticText* m_staticText5; + wxTextCtrl* m_textCDevCount; + wxStaticText* m_staticText4; + wxTextCtrl* m_textAPICount; + wxButton* m_btnRefresh; + wxStdDialogButtonSizer* m_sdbSizer1; + wxButton* m_sdbSizer1OK; + wxButton* m_sdbSizer1Apply; + wxButton* m_sdbSizer1Cancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnActivateApp( wxActivateEvent& event ) { event.Skip(); } + virtual void OnCloseFrame( wxCloseEvent& event ) { event.Skip(); } + virtual void OnRxInDeviceSelect( wxListEvent& event ) { event.Skip(); } + virtual void OnRxOutDeviceSelect( wxListEvent& event ) { event.Skip(); } + virtual void OnTxInDeviceSelect( wxListEvent& event ) { event.Skip(); } + virtual void OnTxOutDeviceSelect( wxListEvent& event ) { event.Skip(); } + virtual void OnRefreshClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnApplyAudioParameters( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancelAudioParameters( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOkAudioParameters( wxCommandEvent& event ) { event.Skip(); } + + + public: + + MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PortAudio Device Enumeration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 790,400 ), long style = wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL ); + + ~MainFrameBase(); + +}; + +#endif //__GUI_H__ diff --git a/fdmdv2/tests/pa_enum/gui.py b/fdmdv2/tests/pa_enum/gui.py new file mode 100644 index 00000000..507c4ee5 --- /dev/null +++ b/fdmdv2/tests/pa_enum/gui.py @@ -0,0 +1,332 @@ +# -*- coding: utf-8 -*- + +########################################################################### +## Python code generated with wxFormBuilder (version Mar 17 2012) +## http://www.wxformbuilder.org/ +## +## PLEASE DO "NOT" EDIT THIS FILE! +########################################################################### + +import wx +import wx.xrc + +import gettext +_ = gettext.gettext + +########################################################################### +## Class MainFrameBase +########################################################################### + +class MainFrameBase ( wx.Frame ): + + def __init__( self, parent ): + wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = _(u"PortAudio Device Enumeration"), pos = wx.DefaultPosition, size = wx.Size( 790,400 ), style = wx.CLOSE_BOX|wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER|wx.TAB_TRAVERSAL ) + + self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize ) + + mainSizer = wx.BoxSizer( wx.VERTICAL ) + + self.m_panel1 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) + bSizer4 = wx.BoxSizer( wx.VERTICAL ) + + self.m_notebook1 = wx.Notebook( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.NB_BOTTOM ) + self.m_panelRx = wx.Panel( self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) + bSizer20 = wx.BoxSizer( wx.VERTICAL ) + + gSizer4 = wx.GridSizer( 2, 1, 0, 0 ) + + sbSizer2 = wx.StaticBoxSizer( wx.StaticBox( self.m_panelRx, wx.ID_ANY, _(u"Rx Radio Device") ), wx.VERTICAL ) + + self.m_listCtrlRxInDevices = wx.ListCtrl( self.m_panelRx, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LC_HRULES|wx.LC_REPORT|wx.LC_VRULES ) + sbSizer2.Add( self.m_listCtrlRxInDevices, 1, wx.ALL|wx.EXPAND, 1 ) + + bSizer811 = wx.BoxSizer( wx.HORIZONTAL ) + + self.m_staticText51 = wx.StaticText( self.m_panelRx, wx.ID_ANY, _(u"Device:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText51.Wrap( -1 ) + bSizer811.Add( self.m_staticText51, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + self.m_textCtrlRxIn = wx.TextCtrl( self.m_panelRx, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer811.Add( self.m_textCtrlRxIn, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 ) + + self.m_staticText6 = wx.StaticText( self.m_panelRx, wx.ID_ANY, _(u"Sample Rate:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText6.Wrap( -1 ) + bSizer811.Add( self.m_staticText6, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + m_cbSampleRateRxInChoices = [] + self.m_cbSampleRateRxIn = wx.ComboBox( self.m_panelRx, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, m_cbSampleRateRxInChoices, wx.CB_DROPDOWN ) + bSizer811.Add( self.m_cbSampleRateRxIn, 0, wx.ALL, 1 ) + + + sbSizer2.Add( bSizer811, 0, wx.EXPAND, 5 ) + + + gSizer4.Add( sbSizer2, 1, wx.EXPAND, 5 ) + + sbSizer3 = wx.StaticBoxSizer( wx.StaticBox( self.m_panelRx, wx.ID_ANY, _(u"Rx Speaker Stream") ), wx.VERTICAL ) + + self.m_listCtrlRxOutDevices = wx.ListCtrl( self.m_panelRx, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LC_HRULES|wx.LC_REPORT|wx.LC_VRULES ) + sbSizer3.Add( self.m_listCtrlRxOutDevices, 1, wx.ALL|wx.EXPAND, 1 ) + + bSizer81 = wx.BoxSizer( wx.HORIZONTAL ) + + self.m_staticText9 = wx.StaticText( self.m_panelRx, wx.ID_ANY, _(u"Device:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText9.Wrap( -1 ) + bSizer81.Add( self.m_staticText9, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + self.m_textRxOut = wx.TextCtrl( self.m_panelRx, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer81.Add( self.m_textRxOut, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 ) + + self.m_staticText10 = wx.StaticText( self.m_panelRx, wx.ID_ANY, _(u"Sample Rate:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText10.Wrap( -1 ) + bSizer81.Add( self.m_staticText10, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + m_cbSampleRateRxOutChoices = [] + self.m_cbSampleRateRxOut = wx.ComboBox( self.m_panelRx, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, m_cbSampleRateRxOutChoices, wx.CB_DROPDOWN ) + bSizer81.Add( self.m_cbSampleRateRxOut, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 ) + + + sbSizer3.Add( bSizer81, 0, wx.EXPAND, 2 ) + + + gSizer4.Add( sbSizer3, 1, wx.EXPAND, 2 ) + + + bSizer20.Add( gSizer4, 1, wx.EXPAND, 1 ) + + + self.m_panelRx.SetSizer( bSizer20 ) + self.m_panelRx.Layout() + bSizer20.Fit( self.m_panelRx ) + self.m_notebook1.AddPage( self.m_panelRx, _(u"Receive"), True ) + self.m_panelTx = wx.Panel( self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) + bSizer18 = wx.BoxSizer( wx.VERTICAL ) + + gSizer2 = wx.GridSizer( 2, 1, 0, 0 ) + + sbSizer22 = wx.StaticBoxSizer( wx.StaticBox( self.m_panelTx, wx.ID_ANY, _(u"Tx Microphone Stream") ), wx.VERTICAL ) + + self.m_listCtrlTxInDevices = wx.ListCtrl( self.m_panelTx, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LC_HRULES|wx.LC_REPORT|wx.LC_VRULES ) + sbSizer22.Add( self.m_listCtrlTxInDevices, 1, wx.ALL|wx.EXPAND, 1 ) + + bSizer83 = wx.BoxSizer( wx.HORIZONTAL ) + + self.m_staticText12 = wx.StaticText( self.m_panelTx, wx.ID_ANY, _(u"Device:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText12.Wrap( -1 ) + bSizer83.Add( self.m_staticText12, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + self.m_textCtrlTxIn = wx.TextCtrl( self.m_panelTx, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer83.Add( self.m_textCtrlTxIn, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 ) + + self.m_staticText11 = wx.StaticText( self.m_panelTx, wx.ID_ANY, _(u"Sample Rate:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText11.Wrap( -1 ) + bSizer83.Add( self.m_staticText11, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + m_cbSampleRateTxInChoices = [] + self.m_cbSampleRateTxIn = wx.ComboBox( self.m_panelTx, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, m_cbSampleRateTxInChoices, wx.CB_DROPDOWN ) + bSizer83.Add( self.m_cbSampleRateTxIn, 0, wx.ALL, 1 ) + + + sbSizer22.Add( bSizer83, 0, wx.EXPAND, 2 ) + + + gSizer2.Add( sbSizer22, 1, wx.EXPAND, 5 ) + + sbSizer21 = wx.StaticBoxSizer( wx.StaticBox( self.m_panelTx, wx.ID_ANY, _(u"Tx Radio Stream") ), wx.VERTICAL ) + + self.m_listCtrlTxOutDevices = wx.ListCtrl( self.m_panelTx, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LC_HRULES|wx.LC_REPORT|wx.LC_VRULES ) + sbSizer21.Add( self.m_listCtrlTxOutDevices, 1, wx.ALL|wx.EXPAND, 2 ) + + bSizer82 = wx.BoxSizer( wx.HORIZONTAL ) + + self.m_staticText81 = wx.StaticText( self.m_panelTx, wx.ID_ANY, _(u"Device:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText81.Wrap( -1 ) + bSizer82.Add( self.m_staticText81, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + self.m_textCtrTxOut = wx.TextCtrl( self.m_panelTx, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer82.Add( self.m_textCtrTxOut, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 ) + + self.m_staticText71 = wx.StaticText( self.m_panelTx, wx.ID_ANY, _(u"Sample Rate:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText71.Wrap( -1 ) + bSizer82.Add( self.m_staticText71, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + m_cbSampleRateTxOutChoices = [] + self.m_cbSampleRateTxOut = wx.ComboBox( self.m_panelTx, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, m_cbSampleRateTxOutChoices, wx.CB_DROPDOWN ) + bSizer82.Add( self.m_cbSampleRateTxOut, 0, wx.ALL, 1 ) + + + sbSizer21.Add( bSizer82, 0, wx.EXPAND, 2 ) + + + gSizer2.Add( sbSizer21, 1, wx.EXPAND, 5 ) + + + bSizer18.Add( gSizer2, 1, wx.EXPAND, 1 ) + + + self.m_panelTx.SetSizer( bSizer18 ) + self.m_panelTx.Layout() + bSizer18.Fit( self.m_panelTx ) + self.m_notebook1.AddPage( self.m_panelTx, _(u"Transmit"), False ) + self.m_panelAPI = wx.Panel( self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) + bSizer12 = wx.BoxSizer( wx.HORIZONTAL ) + + gSizer31 = wx.GridSizer( 2, 1, 0, 0 ) + + sbSizer1 = wx.StaticBoxSizer( wx.StaticBox( self.m_panelAPI, wx.ID_ANY, _(u"PortAudio") ), wx.VERTICAL ) + + gSizer3 = wx.GridSizer( 4, 2, 0, 0 ) + + self.m_staticText7 = wx.StaticText( self.m_panelAPI, wx.ID_ANY, _(u"PortAudio Version String:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText7.Wrap( -1 ) + gSizer3.Add( self.m_staticText7, 0, wx.ALIGN_RIGHT|wx.ALL|wx.ALIGN_CENTER_VERTICAL, 1 ) + + bSizer151 = wx.BoxSizer( wx.VERTICAL ) + + self.m_textStringVer = wx.TextCtrl( self.m_panelAPI, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_READONLY ) + bSizer151.Add( self.m_textStringVer, 0, wx.ALL|wx.EXPAND, 1 ) + + + gSizer3.Add( bSizer151, 1, wx.EXPAND, 2 ) + + self.m_staticText8 = wx.StaticText( self.m_panelAPI, wx.ID_ANY, _(u"PortAudio Int Version:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText8.Wrap( -1 ) + gSizer3.Add( self.m_staticText8, 0, wx.ALIGN_RIGHT|wx.ALL|wx.ALIGN_CENTER_VERTICAL, 1 ) + + bSizer13 = wx.BoxSizer( wx.VERTICAL ) + + self.m_textIntVer = wx.TextCtrl( self.m_panelAPI, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_READONLY ) + bSizer13.Add( self.m_textIntVer, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 1 ) + + + gSizer3.Add( bSizer13, 1, wx.EXPAND, 5 ) + + self.m_staticText5 = wx.StaticText( self.m_panelAPI, wx.ID_ANY, _(u"Device Count:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText5.Wrap( -1 ) + gSizer3.Add( self.m_staticText5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 1 ) + + bSizer14 = wx.BoxSizer( wx.VERTICAL ) + + self.m_textCDevCount = wx.TextCtrl( self.m_panelAPI, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 45,-1 ), wx.TE_READONLY ) + self.m_textCDevCount.SetMaxSize( wx.Size( 45,-1 ) ) + + bSizer14.Add( self.m_textCDevCount, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 ) + + + gSizer3.Add( bSizer14, 1, wx.EXPAND, 5 ) + + self.m_staticText4 = wx.StaticText( self.m_panelAPI, wx.ID_ANY, _(u"API Count:"), wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText4.Wrap( -1 ) + gSizer3.Add( self.m_staticText4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 1 ) + + bSizer15 = wx.BoxSizer( wx.VERTICAL ) + + self.m_textAPICount = wx.TextCtrl( self.m_panelAPI, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 45,-1 ), wx.TE_READONLY ) + self.m_textAPICount.SetMaxSize( wx.Size( 45,-1 ) ) + + bSizer15.Add( self.m_textAPICount, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 ) + + + gSizer3.Add( bSizer15, 1, wx.EXPAND, 5 ) + + + sbSizer1.Add( gSizer3, 1, wx.EXPAND, 2 ) + + + gSizer31.Add( sbSizer1, 1, wx.EXPAND, 2 ) + + sbSizer6 = wx.StaticBoxSizer( wx.StaticBox( self.m_panelAPI, wx.ID_ANY, _(u"Other") ), wx.VERTICAL ) + + + gSizer31.Add( sbSizer6, 1, wx.EXPAND, 5 ) + + + bSizer12.Add( gSizer31, 1, wx.EXPAND, 5 ) + + + self.m_panelAPI.SetSizer( bSizer12 ) + self.m_panelAPI.Layout() + bSizer12.Fit( self.m_panelAPI ) + self.m_notebook1.AddPage( self.m_panelAPI, _(u"API Info"), False ) + + bSizer4.Add( self.m_notebook1, 1, wx.EXPAND |wx.ALL, 0 ) + + + self.m_panel1.SetSizer( bSizer4 ) + self.m_panel1.Layout() + bSizer4.Fit( self.m_panel1 ) + mainSizer.Add( self.m_panel1, 1, wx.EXPAND |wx.ALL, 1 ) + + bSizer6 = wx.BoxSizer( wx.HORIZONTAL ) + + self.m_btnRefresh = wx.Button( self, wx.ID_ANY, _(u"Refresh"), wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer6.Add( self.m_btnRefresh, 0, wx.ALIGN_CENTER|wx.ALL, 2 ) + + m_sdbSizer1 = wx.StdDialogButtonSizer() + self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK ) + m_sdbSizer1.AddButton( self.m_sdbSizer1OK ) + self.m_sdbSizer1Apply = wx.Button( self, wx.ID_APPLY ) + m_sdbSizer1.AddButton( self.m_sdbSizer1Apply ) + self.m_sdbSizer1Cancel = wx.Button( self, wx.ID_CANCEL ) + m_sdbSizer1.AddButton( self.m_sdbSizer1Cancel ) + m_sdbSizer1.Realize(); + + bSizer6.Add( m_sdbSizer1, 1, wx.ALIGN_CENTER_VERTICAL, 2 ) + + + mainSizer.Add( bSizer6, 0, wx.EXPAND, 2 ) + + + self.SetSizer( mainSizer ) + self.Layout() + + self.Centre( wx.BOTH ) + + # Connect Events + self.Bind( wx.EVT_ACTIVATE_APP, self.OnActivateApp ) + self.Bind( wx.EVT_CLOSE, self.OnCloseFrame ) + self.m_listCtrlRxInDevices.Bind( wx.EVT_LIST_ITEM_SELECTED, self.OnRxInDeviceSelect ) + self.m_listCtrlRxOutDevices.Bind( wx.EVT_LIST_ITEM_SELECTED, self.OnRxOutDeviceSelect ) + self.m_listCtrlTxInDevices.Bind( wx.EVT_LIST_ITEM_SELECTED, self.OnTxInDeviceSelect ) + self.m_listCtrlTxOutDevices.Bind( wx.EVT_LIST_ITEM_SELECTED, self.OnTxOutDeviceSelect ) + self.m_btnRefresh.Bind( wx.EVT_BUTTON, self.OnRefreshClick ) + self.m_sdbSizer1Apply.Bind( wx.EVT_BUTTON, self.OnApplyAudioParameters ) + self.m_sdbSizer1Cancel.Bind( wx.EVT_BUTTON, self.OnCancelAudioParameters ) + self.m_sdbSizer1OK.Bind( wx.EVT_BUTTON, self.OnOkAudioParameters ) + + def __del__( self ): + pass + + + # Virtual event handlers, overide them in your derived class + def OnActivateApp( self, event ): + event.Skip() + + def OnCloseFrame( self, event ): + event.Skip() + + def OnRxInDeviceSelect( self, event ): + event.Skip() + + def OnRxOutDeviceSelect( self, event ): + event.Skip() + + def OnTxInDeviceSelect( self, event ): + event.Skip() + + def OnTxOutDeviceSelect( self, event ): + event.Skip() + + def OnRefreshClick( self, event ): + event.Skip() + + def OnApplyAudioParameters( self, event ): + event.Skip() + + def OnCancelAudioParameters( self, event ): + event.Skip() + + def OnOkAudioParameters( self, event ): + event.Skip() + + diff --git a/fdmdv2/tests/pa_enum/gui.xrc b/fdmdv2/tests/pa_enum/gui.xrc new file mode 100644 index 00000000..f8b101ec --- /dev/null +++ b/fdmdv2/tests/pa_enum/gui.xrc @@ -0,0 +1,527 @@ + + + + + 790,400 + PortAudio Device Enumeration + 1 + 0 + + wxVERTICAL + + + wxEXPAND | wxALL + 1 + + + + wxVERTICAL + + + wxEXPAND | wxALL + 0 + + + + + 1 + + + + wxVERTICAL + + + wxEXPAND + 1 + + 2 + 1 + 0 + 0 + + + wxEXPAND + 5 + + wxVERTICAL + + + + wxALL|wxEXPAND + 1 + + + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 5 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 5 + + + -1 + + + + + wxALL + 1 + + + + + + + + + + + + + wxEXPAND + 2 + + wxVERTICAL + + + + wxALL|wxEXPAND + 1 + + + + + + + wxEXPAND + 2 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 5 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + + + + + + + + + + + + + + + 0 + + + + wxVERTICAL + + + wxEXPAND + 1 + + 2 + 1 + 0 + 0 + + + wxEXPAND + 5 + + wxVERTICAL + + + + wxALL|wxEXPAND + 1 + + + + + + + wxEXPAND + 2 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 5 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 5 + + + -1 + + + + + wxALL + 1 + + + + + + + + + + + + + wxEXPAND + 5 + + wxVERTICAL + + + + wxALL|wxEXPAND + 2 + + + + + + + wxEXPAND + 2 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 5 + + + -1 + + + + + wxALL + 1 + + + + + + + + + + + + + + + + + + 0 + + + + wxHORIZONTAL + + + wxEXPAND + 5 + + 2 + 1 + 0 + 0 + + + wxEXPAND + 2 + + wxVERTICAL + + + + wxEXPAND + 2 + + 4 + 2 + 0 + 0 + + + wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL + 1 + + + -1 + + + + + wxEXPAND + 2 + + wxVERTICAL + + + wxALL|wxEXPAND + 1 + + + + 0 + + + + + + + wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL + 1 + + + -1 + + + + + wxEXPAND + 5 + + wxVERTICAL + + + wxALL|wxALIGN_CENTER_VERTICAL + 1 + + + + 0 + + + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 1 + + + -1 + + + + + wxEXPAND + 5 + + wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + 45,-1 + + 0 + + + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 1 + + + -1 + + + + + wxEXPAND + 5 + + wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + 45,-1 + + 0 + + + + + + + + + + + wxEXPAND + 5 + + wxVERTICAL + + + + + + + + + + + + + + + + wxEXPAND + 2 + + wxHORIZONTAL + + + wxALIGN_CENTER|wxALL + 2 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL + 2 + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + + + + + + + + diff --git a/fdmdv2/tests/pa_enum/main.cpp b/fdmdv2/tests/pa_enum/main.cpp new file mode 100644 index 00000000..68455e83 --- /dev/null +++ b/fdmdv2/tests/pa_enum/main.cpp @@ -0,0 +1,429 @@ +//========================================================================= +// Name: main.cpp +// Purpose: Implements simple wxWidgets application with GUI +// created using wxFormBuilder. +// Author: +// Created: +// Copyright: +// License: wxWidgets license (www.wxwidgets.org) +// +// Notes: Note that all GUI creation code is implemented in +// gui.cpp source file which is generated by wxFormBuilder. +//========================================================================= +#include "main.h" + +// initialize the application +IMPLEMENT_APP(MainApp); + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// application class implementation +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +bool MainApp::OnInit() +{ + SetTopWindow(new MainFrame(NULL)); + GetTopWindow()->Show(); + // true = enter the main loop + return true; +} + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// main application frame implementation +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +MainFrame::MainFrame(wxWindow *parent) : MainFrameBase(parent) +{ + m_isPaInitialized = false; + wxInitAllImageHandlers(); + // Give it an icon + SetIcon(wxICON("../bitmaps/sample.ico")); + + // Make an image list containing large icons + m_imageListNormal = new wxImageList(32, 32, true); + m_imageListSmall = new wxImageList(16, 16, true); + +#ifdef __WXMSW__ + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchec.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/transparent.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolchar.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooldata.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolgame.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/toolnote.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/tooltime.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/inArrow16x16.ico"), wxBITMAP_TYPE_ICO)); + m_imageListSmall->Add(wxIcon(wxT("bitmaps/outArrow16x16.ico"), wxBITMAP_TYPE_ICO)); +#else + m_imageListNormal->Add(wxIcon( toolbrai_xpm )); + m_imageListNormal->Add(wxIcon( toolchar_xpm )); + m_imageListNormal->Add(wxIcon( tooldata_xpm )); + m_imageListNormal->Add(wxIcon( toolnote_xpm )); + m_imageListNormal->Add(wxIcon( tooltodo_xpm )); + m_imageListNormal->Add(wxIcon( toolchec_xpm )); + m_imageListNormal->Add(wxIcon( toolgame_xpm )); + m_imageListNormal->Add(wxIcon( tooltime_xpm )); + m_imageListNormal->Add(wxIcon( toolword_xpm )); + m_imageListSmall->Add(wxIcon(small1_xpm)); +#endif + if(!m_isPaInitialized) + { + if((pa_err = Pa_Initialize()) == paNoError) + { + m_isPaInitialized = true; + } + else + { + wxMessageBox(wxT("Port Audio failed to initialize"), wxT("Pa_Initialize"), wxOK); + return; + } + } + m_notebook1->SetSelection(0); + showAPIInfo(); + m_RxInDevices.m_listDevices = m_listCtrlRxInDevices; + m_RxInDevices.direction = AUDIO_IN; + m_RxInDevices.m_textDevice = m_textCtrlRxIn; + m_RxInDevices.m_cbSampleRate = m_cbSampleRateRxIn; + + m_RxOutDevices.m_listDevices = m_listCtrlRxOutDevices; + m_RxOutDevices.direction = AUDIO_OUT; + m_RxOutDevices.m_textDevice = m_textRxOut; + m_RxOutDevices.m_cbSampleRate = m_cbSampleRateRxOut; + + m_TxInDevices.m_listDevices = m_listCtrlTxInDevices; + m_TxInDevices.direction = AUDIO_IN; + m_TxInDevices.m_textDevice = m_textCtrlTxIn; + m_TxInDevices.m_cbSampleRate = m_cbSampleRateTxIn; + + m_TxOutDevices.m_listDevices = m_listCtrlTxOutDevices; + m_TxOutDevices.direction = AUDIO_OUT; + m_TxOutDevices.m_textDevice = m_textCtrTxOut; + m_TxOutDevices.m_cbSampleRate = m_cbSampleRateTxOut; + + populateParams(m_RxInDevices); + populateParams(m_RxOutDevices); + populateParams(m_TxInDevices); + populateParams(m_TxOutDevices); +} + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// ~MainFrame() +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +MainFrame::~MainFrame() +{ +} + +//------------------------------------------------------------------------- +// OnCloseFrame() +//------------------------------------------------------------------------- +void MainFrame::OnCloseFrame(wxCloseEvent& event) +{ + if(m_isPaInitialized) + { + if((pa_err = Pa_Terminate()) == paNoError) + { + m_isPaInitialized = false; + } + else + { + wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK); + } + } + Destroy(); +} + +//------------------------------------------------------------------------- +// OnExitClick() +//------------------------------------------------------------------------- +void MainFrame::OnExitClick(wxCommandEvent& event) +{ + if(m_isPaInitialized) + { + if((pa_err = Pa_Terminate()) == paNoError) + { + m_isPaInitialized = false; + } + else + { + wxMessageBox(wxT("Port Audio failed to Terminate"), wxT("Pa_Terminate"), wxOK); + } + } + Destroy(); +} + +/* +//------------------------------------------------------------------------- +// getSelectedItems() +//------------------------------------------------------------------------- +long *MainFrame::getSelectedItems(wxListCtrl*listCtrl) +{ + long *items[]; + long item = listCtrl->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + items[0] = item; + while ( item != -1 ) + { + wxLogMessage(wxT("\t%ld (%s)"), item, listCtrl->GetItemText(item).c_str()); + if ( ++shownCount > 10 ) + { + wxLogMessage(wxT("\t... more selected items snipped...")); + break; + } + item = listCtrl->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + } +} return items; +*/ + +//------------------------------------------------------------------------- +// OnDeviceSelect() +//------------------------------------------------------------------------- +void MainFrame::OnDeviceSelect( wxListEvent& event ) +{ + wxListItem info; + long item; + item = m_listCtrlRxInDevices->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + wxMessageBox(m_listCtrlRxInDevices->GetItemText(item, 2), wxT("Item"), wxOK); +} + +//------------------------------------------------------------------------- +// DisplaySupportedSampleRates() +//------------------------------------------------------------------------- +void MainFrame::DisplaySupportedSampleRates(const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters) +{ + static double standardSampleRates[] = + { + 8000.0, 9600.0, + 11025.0, 12000.0, + 16000.0, 22050.0, + 24000.0, 32000.0, + 44100.0, 48000.0, + 88200.0, 96000.0, + 192000.0, -1 // negative terminated list + }; + int i; + int printCount; + PaError err; + + printCount = 0; + for(i=0; standardSampleRates[i] > 0; i++) + { + err = Pa_IsFormatSupported(inputParameters, outputParameters, standardSampleRates[i]); + if(err == paFormatIsSupported) + { + if(printCount == 0) + { + printf("\t%8.2f", standardSampleRates[i]); + printCount = 1; + } + else if(printCount == 4) + { + printf(",\n\t%8.2f", standardSampleRates[i]); + printCount = 1; + } + else + { + printf(", %8.2f", standardSampleRates[i]); + ++printCount; + } + } + } + if(!printCount) + { + printf("None\n"); + } + else + { + printf("\n"); + } +} + +//------------------------------------------------------------------------- +// OnRefreshClick() +//------------------------------------------------------------------------- +void MainFrame::OnRefreshClick(wxCommandEvent& event) +{ + m_notebook1->SetSelection(0); + showAPIInfo(); + populateParams(m_RxInDevices); + populateParams(m_RxOutDevices); + populateParams(m_TxInDevices); + populateParams(m_TxOutDevices); +} + +//------------------------------------------------------------------------- +// GetAPIInfo() +//------------------------------------------------------------------------- +void MainFrame::showAPIInfo() +{ + wxString strval; + int apiCount = 0; + int numDevices = 0; + + strval = Pa_GetVersionText(); + m_textStringVer->SetValue(strval); + + numDevices = Pa_GetVersion(); + strval.Printf(wxT("%d"), numDevices); + m_textIntVer->SetValue(strval); + + apiCount = Pa_GetHostApiCount(); + strval.Printf(wxT("%d"), apiCount); + m_textAPICount->SetValue(strval); + + numDevices = Pa_GetDeviceCount(); + strval.Printf(wxT("%d"), numDevices); + m_textCDevCount->SetValue(strval); +} + +//------------------------------------------------------------------------- +// populateParams() +//------------------------------------------------------------------------- +void MainFrame::populateParams(AudioInfoDisplay ai) //wxListCtrl* ctrl, int in_out) +{ + const PaDeviceInfo *deviceInfo = NULL; + int j = 0; + wxListCtrl* ctrl = ai.m_listDevices; + int in_out = ai.direction; + //wxTextCtrl* txtCtrl = ai.m_textDevice; + //wxComboBox* cb = ai.m_cbSampleRate; + long idx; + int defaultDisplayed; + int numDevices; + wxListItem listItem; + wxString buf; + int devn; + + numDevices = Pa_GetDeviceCount(); + + if(ctrl->GetColumnCount() > 0) + { + ctrl->ClearAll(); + } + ctrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL); + + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("Sel")); + idx = ctrl->InsertColumn(0, listItem); + ctrl->SetColumnWidth(0, 37); + + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("Dflt")); + idx = ctrl->InsertColumn(1, listItem); + ctrl->SetColumnWidth(1, 37); + + listItem.SetAlign(wxLIST_FORMAT_LEFT); + listItem.SetText(wxT("Device")); + idx = ctrl->InsertColumn(2, listItem); + ctrl->SetColumnWidth(2, 190); + + listItem.SetAlign(wxLIST_FORMAT_LEFT); + listItem.SetText(wxT("API")); + idx = ctrl->InsertColumn(3, listItem); + ctrl->SetColumnWidth(3, 190); + + if(in_out == AUDIO_IN) + { + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("# Inputs")); + idx = ctrl->InsertColumn(4, listItem); + ctrl->SetColumnWidth(4, 75); + } + else if(in_out == AUDIO_OUT) + { + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("# Outputs")); + idx = ctrl->InsertColumn(4, listItem); + ctrl->SetColumnWidth(4, 75); + } + + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("Min Latency")); + ctrl->InsertColumn(5, listItem); + ctrl->SetColumnWidth(5, 100); + + listItem.SetAlign(wxLIST_FORMAT_CENTRE); + listItem.SetText(wxT("Max Latency")); + ctrl->InsertColumn(6, listItem); + ctrl->SetColumnWidth(6, 100); + + for(devn = 0; devn < numDevices; devn++) + { + buf.Printf(wxT("")); + deviceInfo = Pa_GetDeviceInfo(devn); + if(in_out == AUDIO_IN) + { + if(deviceInfo->maxInputChannels > 0) + { + idx = ctrl->InsertItem(j, ICON_TRANSPARENT); + defaultDisplayed = false; + if(devn == Pa_GetDefaultInputDevice()) + { + buf.Printf("->>"); + ctrl->SetItem(idx, 1, buf); + defaultDisplayed = true; + } + else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultInputDevice) + { + buf.Printf("-->"); + ctrl->SetItem(idx, 1, buf); + defaultDisplayed = true; + } + else + { + buf.Printf("---"); + ctrl->SetItem(idx, 1, buf); + } + buf.Printf(wxT("%s"), deviceInfo->name); + ctrl->SetItem(idx, 2, buf); + + buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name); + ctrl->SetItem(idx, 3, buf); + + buf.Printf(wxT("%i"), deviceInfo->maxInputChannels); + ctrl->SetItem(idx, 4, buf); + + buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowInputLatency); + ctrl->SetItem(idx, 5, buf); + + buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighInputLatency); + ctrl->SetItem(idx, 6, buf); + } + } + else if(in_out == AUDIO_OUT) + { + if(deviceInfo->maxOutputChannels > 0) + { + idx = ctrl->InsertItem(j, ICON_TRANSPARENT); + defaultDisplayed = false; + if(devn == Pa_GetDefaultOutputDevice()) + { + buf.Printf("<<-"); + ctrl->SetItem(idx, 1, buf); + defaultDisplayed = true; + } + else if(devn == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultOutputDevice) + { + buf.Printf("<--"); + ctrl->SetItem(idx, 1, buf); + defaultDisplayed = true; + } + else + { + buf.Printf("---"); + ctrl->SetItem(idx, 1, buf); + } + buf.Printf(wxT("%s"), deviceInfo->name); + ctrl->SetItem(idx, 2, buf); + + buf.Printf(wxT("%s"), Pa_GetHostApiInfo(deviceInfo->hostApi)->name); + ctrl->SetItem(idx, 3, buf); + + buf.Printf(wxT("%i"), deviceInfo->maxOutputChannels); + ctrl->SetItem(idx, 4, buf); + + buf.Printf(wxT("%8.4f"), deviceInfo->defaultLowOutputLatency); + ctrl->SetItem(idx, 5, buf); + + buf.Printf(wxT("%8.4f"), deviceInfo->defaultHighOutputLatency); + ctrl->SetItem(idx, 6, buf); + } + } + j++; + } +} + diff --git a/fdmdv2/tests/pa_enum/main.h b/fdmdv2/tests/pa_enum/main.h new file mode 100644 index 00000000..b962a51d --- /dev/null +++ b/fdmdv2/tests/pa_enum/main.h @@ -0,0 +1,112 @@ +//========================================================================= +// Name: main.h +// Purpose: Declares simple wxWidgets application with GUI +// created using wxFormBuilder. +// Author: +// Created: +// Copyright: +// License: wxWidgets license (www.wxwidgets.org) +// +// Notes: Note that all GUI creation code is declared in +// gui.h source file which is generated by wxFormBuilder. +//========================================================================= +#ifndef __main__ +#define __main__ + +// main wxWidgets header file +#include +#include +#if !defined(__WXMSW__) && !defined(__WXPM__) + #include "../bitmaps/sample.xpm" +#endif + +#ifndef __WXMSW__ + #include "bitmaps/toolbrai.xpm" + #include "bitmaps/toolchar.xpm" + #include "bitmaps/tooldata.xpm" + #include "bitmaps/toolnote.xpm" + #include "bitmaps/tooltodo.xpm" + #include "bitmaps/toolchec.xpm" + #include "bitmaps/toolgame.xpm" + #include "bitmaps/tooltime.xpm" + #include "bitmaps/toolword.xpm" + #include "bitmaps/small1.xpm" +#endif + +#define AUDIO_IN 0 +#define AUDIO_OUT 1 + +#define ICON_TRANSPARENT 1 +#define ICON_CHECK 0 +#define ICON_toolchar 2 +#define ICON_tooldata 3 +#define ICON_toolgame 4 +#define ICON_toolnote 5 +#define ICON_TOOLTIME 6 +#define ICON_INARROW 7 +#define ICON_OUTARROW 8 + +// gui classes generated by wxFormBuilder +#include "gui.h" +#include "portaudio.h" +#ifdef WIN32 +#if PA_USE_ASIO +#include "pa_asio.h" +#endif +#endif + + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// application class declaration +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +class MainApp : public wxApp +{ + public: + virtual bool OnInit(); +}; + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// AudioInfoDisplay +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +class AudioInfoDisplay +{ + public: + wxListCtrl* m_listDevices; + int direction; + wxTextCtrl* m_textDevice; + wxComboBox* m_cbSampleRate; +}; + +// declare global static function wxGetApp() +DECLARE_APP(MainApp) + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// main application frame declaration +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +class MainFrame : public MainFrameBase +{ + public: + MainFrame( wxWindow *parent ); + virtual ~MainFrame(); + PaError pa_err; + bool m_isPaInitialized; + wxImageList *m_imageListNormal; + wxImageList *m_imageListSmall; + + protected: + // protected event handlers + void OnCloseFrame( wxCloseEvent& event ); + void OnDeviceSelect( wxListEvent& event ); + + void OnExitClick( wxCommandEvent& event ); + void OnRefreshClick( wxCommandEvent& event ); + void DisplaySupportedSampleRates(const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters); + void populateParams(AudioInfoDisplay); + void showAPIInfo(); + AudioInfoDisplay m_RxInDevices; + AudioInfoDisplay m_RxOutDevices; + AudioInfoDisplay m_TxInDevices; + AudioInfoDisplay m_TxOutDevices; +}; + +#endif //__main__ diff --git a/fdmdv2/tests/pa_enum/pa_enum.mk b/fdmdv2/tests/pa_enum/pa_enum.mk new file mode 100644 index 00000000..4aca206a --- /dev/null +++ b/fdmdv2/tests/pa_enum/pa_enum.mk @@ -0,0 +1,114 @@ +## +## Auto Generated makefile by CodeLite IDE +## any manual changes will be erased +## +## Release +ProjectName :=pa_enum +ConfigurationName :=Release +IntermediateDirectory :=./Release +OutDir := $(IntermediateDirectory) +WorkspacePath := "C:\Users\wittend\Projects\Radio\fdmdv2" +ProjectPath := "C:\Users\wittend\Projects\Radio\fdmdv2\pa_enum" +CurrentFileName := +CurrentFilePath := +CurrentFileFullPath := +User :=wittend +Date :=8/14/2012 +CodeLitePath :="C:\Program Files\CodeLite" +LinkerName :=g++ +ArchiveTool :=ar rcus +SharedObjectLinkerName :=g++ -shared -fPIC +ObjectSuffix :=.o +DependSuffix :=.o.d +PreprocessSuffix :=.o.i +DebugSwitch :=-gstab +IncludeSwitch :=-I +LibrarySwitch :=-l +OutputSwitch :=-o +LibraryPathSwitch :=-L +PreprocessorSwitch :=-D +SourceSwitch :=-c +CompilerName :=g++ +C_CompilerName :=gcc +OutputFile :=$(IntermediateDirectory)/$(ProjectName) +Preprocessors :=$(PreprocessorSwitch)__WX__ +ObjectSwitch :=-o +ArchiveOutputSwitch := +PreprocessOnlySwitch :=-E +ObjectsFileList :="C:\Users\wittend\Projects\Radio\fdmdv2\pa_enum\pa_enum.txt" +PCHCompileFlags := +MakeDirCommand :=makedir +CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors) +C_CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors) +LinkOptions := -mwindows -s $(shell wx-config --debug=no --libs --unicode=yes) +IncludePath := $(IncludeSwitch). $(IncludeSwitch)/bin/MinGW/msys/1.0/local/include +IncludePCH := +RcIncludePath := +Libs := $(LibrarySwitch)portaudio $(LibrarySwitch)portaudiocpp +LibPath := $(LibraryPathSwitch). $(LibraryPathSwitch)/bin/MinGW/msys/1.0/local/lib + + +## +## User defined environment variables +## +CodeLiteDir:=C:\Program Files\CodeLite +WXWIN:=C:\bin\wxWidgets-2.9.4 +PATH:=$(WXWIN)\lib\gcc_dll;$(PATH) +WXCFG:=gcc_dll\mswu +UNIT_TEST_PP_SRC_DIR:=C:\bin\UnitTest++-1.3 +Objects=$(IntermediateDirectory)/gui$(ObjectSuffix) $(IntermediateDirectory)/main$(ObjectSuffix) + +## +## Main Build Targets +## +.PHONY: all clean PreBuild PrePreBuild PostBuild +all: $(OutputFile) + +$(OutputFile): $(IntermediateDirectory)/.d $(Objects) + @$(MakeDirCommand) $(@D) + @echo "" > $(IntermediateDirectory)/.d + @echo $(Objects) > $(ObjectsFileList) + $(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions) + +$(IntermediateDirectory)/.d: + @$(MakeDirCommand) "./Release" + +PreBuild: + + +## +## Objects +## +$(IntermediateDirectory)/gui$(ObjectSuffix): gui.cpp $(IntermediateDirectory)/gui$(DependSuffix) + $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_enum/gui.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/gui$(ObjectSuffix) $(IncludePath) +$(IntermediateDirectory)/gui$(DependSuffix): gui.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/gui$(ObjectSuffix) -MF$(IntermediateDirectory)/gui$(DependSuffix) -MM "C:/Users/wittend/Projects/Radio/fdmdv2/pa_enum/gui.cpp" + +$(IntermediateDirectory)/gui$(PreprocessSuffix): gui.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/gui$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_enum/gui.cpp" + +$(IntermediateDirectory)/main$(ObjectSuffix): main.cpp $(IntermediateDirectory)/main$(DependSuffix) + $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_enum/main.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/main$(ObjectSuffix) $(IncludePath) +$(IntermediateDirectory)/main$(DependSuffix): main.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/main$(ObjectSuffix) -MF$(IntermediateDirectory)/main$(DependSuffix) -MM "C:/Users/wittend/Projects/Radio/fdmdv2/pa_enum/main.cpp" + +$(IntermediateDirectory)/main$(PreprocessSuffix): main.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/main$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_enum/main.cpp" + + +-include $(IntermediateDirectory)/*$(DependSuffix) +## +## Clean +## +clean: + $(RM) $(IntermediateDirectory)/gui$(ObjectSuffix) + $(RM) $(IntermediateDirectory)/gui$(DependSuffix) + $(RM) $(IntermediateDirectory)/gui$(PreprocessSuffix) + $(RM) $(IntermediateDirectory)/main$(ObjectSuffix) + $(RM) $(IntermediateDirectory)/main$(DependSuffix) + $(RM) $(IntermediateDirectory)/main$(PreprocessSuffix) + $(RM) $(OutputFile) + $(RM) $(OutputFile).exe + $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-release\pa_enum" + + diff --git a/fdmdv2/tests/pa_enum/pa_enum.project b/fdmdv2/tests/pa_enum/pa_enum.project new file mode 100644 index 00000000..df12bc4d --- /dev/null +++ b/fdmdv2/tests/pa_enum/pa_enum.project @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + diff --git a/fdmdv2/tests/pa_enum/pa_enum.txt b/fdmdv2/tests/pa_enum/pa_enum.txt new file mode 100644 index 00000000..8e987060 --- /dev/null +++ b/fdmdv2/tests/pa_enum/pa_enum.txt @@ -0,0 +1 @@ +./Release/gui.o ./Release/main.o diff --git a/fdmdv2/tests/pa_test/Debug/pa_test.exe b/fdmdv2/tests/pa_test/Debug/pa_test.exe new file mode 100644 index 00000000..70ca4075 Binary files /dev/null and b/fdmdv2/tests/pa_test/Debug/pa_test.exe differ diff --git a/fdmdv2/tests/pa_test/Debug/portaudio.dll b/fdmdv2/tests/pa_test/Debug/portaudio.dll new file mode 100644 index 00000000..9b292864 Binary files /dev/null and b/fdmdv2/tests/pa_test/Debug/portaudio.dll differ diff --git a/fdmdv2/tests/pa_test/Release/portaudio.dll b/fdmdv2/tests/pa_test/Release/portaudio.dll new file mode 100644 index 00000000..9b292864 Binary files /dev/null and b/fdmdv2/tests/pa_test/Release/portaudio.dll differ diff --git a/fdmdv2/tests/pa_test/devs.cxx b/fdmdv2/tests/pa_test/devs.cxx new file mode 100644 index 00000000..31a560f8 --- /dev/null +++ b/fdmdv2/tests/pa_test/devs.cxx @@ -0,0 +1,177 @@ +#include +#include "portaudiocpp/PortAudioCpp.hxx" + +#ifdef WIN32 +#include "portaudiocpp/AsioDeviceAdapter.hxx" +#endif + +// --------------------------------------------------------------------------------------- + +void printSupportedStandardSampleRates( + const portaudio::DirectionSpecificStreamParameters &inputParameters, + const portaudio::DirectionSpecificStreamParameters &outputParameters) +{ + static double STANDARD_SAMPLE_RATES[] = { + 8000.0, 9600.0, 11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0, + 44100.0, 48000.0, 88200.0, 96000.0, -1 }; // negative terminated list + + int printCount = 0; + + for (int i = 0; STANDARD_SAMPLE_RATES[i] > 0; ++i) + { + portaudio::StreamParameters tmp = portaudio::StreamParameters(inputParameters, outputParameters, STANDARD_SAMPLE_RATES[i], 0, paNoFlag); + + if (tmp.isSupported()) + { + if (printCount == 0) + { + std::cout << " " << STANDARD_SAMPLE_RATES[i]; // 8.2 + printCount = 1; + } + else if (printCount == 4) + { + std::cout << "," << std::endl; + std::cout << " " << STANDARD_SAMPLE_RATES[i]; // 8.2 + printCount = 1; + } + else + { + std::cout << ", " << STANDARD_SAMPLE_RATES[i]; // 8.2 + ++printCount; + } + } + } + + if (printCount == 0) + std::cout << "None" << std::endl; + else + std::cout << std::endl; +} + +// --------------------------------------------------------------------------------------- + +int main(int, char*[]); +int main(int, char*[]) +{ + try + { + portaudio::AutoSystem autoSys; + + portaudio::System &sys = portaudio::System::instance(); + + std::cout << "PortAudio version number = " << sys.version() << std::endl; + std::cout << "PortAudio version text = '" << sys.versionText() << "'" << std::endl; + + int numDevices = sys.deviceCount(); + std::cout << "Number of devices = " << numDevices << std::endl; + + for (portaudio::System::DeviceIterator i = sys.devicesBegin(); i != sys.devicesEnd(); ++i) + { + std::cout << "--------------------------------------- device #" << (*i).index() << std::endl; + + // Mark global and API specific default devices: + bool defaultDisplayed = false; + + if ((*i).isSystemDefaultInputDevice()) + { + std::cout << "[ Default Input"; + defaultDisplayed = true; + } + else if ((*i).isHostApiDefaultInputDevice()) + { + std::cout << "[ Default " << (*i).hostApi().name() << " Input"; + defaultDisplayed = true; + } + + if ((*i).isSystemDefaultOutputDevice()) + { + std::cout << (defaultDisplayed ? "," : "["); + std::cout << " Default Output"; + defaultDisplayed = true; + } + else if ((*i).isHostApiDefaultOutputDevice()) + { + std::cout << (defaultDisplayed ? "," : "["); + std::cout << " Default " << (*i).hostApi().name() << " Output"; + defaultDisplayed = true; + } + + if (defaultDisplayed) + std::cout << " ]" << std::endl; + + // Print device info: + std::cout << "Name = " << (*i).name() << std::endl; + std::cout << "Host API = " << (*i).hostApi().name() << std::endl; + std::cout << "Max inputs = " << (*i).maxInputChannels() << ", Max outputs = " << (*i).maxOutputChannels() << std::endl; + + std::cout << "Default low input latency = " << (*i).defaultLowInputLatency() << std::endl; // 8.3 + std::cout << "Default low output latency = " << (*i).defaultLowOutputLatency() << std::endl; // 8.3 + std::cout << "Default high input latency = " << (*i).defaultHighInputLatency() << std::endl; // 8.3 + std::cout << "Default high output latency = " << (*i).defaultHighOutputLatency() << std::endl; // 8.3 + +#ifdef WIN32 + // ASIO specific latency information: + if ((*i).hostApi().typeId() == paASIO) + { + portaudio::AsioDeviceAdapter asioDevice((*i)); + + std::cout << "ASIO minimum buffer size = " << asioDevice.minBufferSize() << std::endl; + std::cout << "ASIO maximum buffer size = " << asioDevice.maxBufferSize() << std::endl; + std::cout << "ASIO preferred buffer size = " << asioDevice.preferredBufferSize() << std::endl; + + if (asioDevice.granularity() == -1) + std::cout << "ASIO buffer granularity = power of 2" << std::endl; + else + std::cout << "ASIO buffer granularity = " << asioDevice.granularity() << std::endl; + } +#endif // WIN32 + + std::cout << "Default sample rate = " << (*i).defaultSampleRate() << std::endl; // 8.2 + + // Poll for standard sample rates: + portaudio::DirectionSpecificStreamParameters inputParameters((*i), (*i).maxInputChannels(), portaudio::INT16, true, 0.0, NULL); + portaudio::DirectionSpecificStreamParameters outputParameters((*i), (*i).maxOutputChannels(), portaudio::INT16, true, 0.0, NULL); + + if (inputParameters.numChannels() > 0) + { + std::cout << "Supported standard sample rates" << std::endl; + std::cout << " for half-duplex 16 bit " << inputParameters.numChannels() << " channel input = " << std::endl; + printSupportedStandardSampleRates(inputParameters, portaudio::DirectionSpecificStreamParameters::null()); + } + + if (outputParameters.numChannels() > 0) + { + std::cout << "Supported standard sample rates" << std::endl; + std::cout << " for half-duplex 16 bit " << outputParameters.numChannels() << " channel output = " << std::endl; + printSupportedStandardSampleRates(portaudio::DirectionSpecificStreamParameters::null(), outputParameters); + } + + if (inputParameters.numChannels() > 0 && outputParameters.numChannels() > 0) + { + std::cout << "Supported standard sample rates" << std::endl; + std::cout << " for full-duplex 16 bit " << inputParameters.numChannels() << " channel input, " << outputParameters.numChannels() << " channel output = " << std::endl; + printSupportedStandardSampleRates(inputParameters, outputParameters); + } + } + + std::cout << "----------------------------------------------" << std::endl; + } + catch (const portaudio::PaException &e) + { + std::cout << "A PortAudio error occured: " << e.paErrorText() << std::endl; + } + catch (const portaudio::PaCppException &e) + { + std::cout << "A PortAudioCpp error occured: " << e.what() << std::endl; + } + catch (const std::exception &e) + { + std::cout << "A generic exception occured: " << e.what() << std::endl; + } + catch (...) + { + std::cout << "An unknown exception occured." << std::endl; + } + + return 0; +} diff --git a/fdmdv2/tests/pa_test/pa_class.cpp b/fdmdv2/tests/pa_test/pa_class.cpp new file mode 100644 index 00000000..1a815869 --- /dev/null +++ b/fdmdv2/tests/pa_test/pa_class.cpp @@ -0,0 +1,370 @@ +#include "pa_class.h" + +PortAudioWrap::PortAudioWrap() +{ + stream = NULL; +// inputBuffer = 0; +// outputBuffer = NULL; + inputDevice = paNoDevice; + outputDevice = paNoDevice; + userData = NULL; + samplerate = 0; + framesPerBuffer = 0; + statusFlags = 0; + streamCallback = NULL; + streamFinishedCallback = NULL; + timeInfo = 0; +} + +PortAudioWrap::~PortAudioWrap() +{ +} + +PaError PortAudioWrap::init() +{ + return Pa_Initialize(); +} + +PaError PortAudioWrap::streamOpen() +{ + return Pa_OpenStream( + &stream, + &inputBuffer, + &outputBuffer, + samplerate, + framesPerBuffer, + statusFlags, + *streamCallback, + userData + ); +} + +PaError PortAudioWrap::streamStart() +{ + return Pa_StartStream(this->stream); +} + +PaError PortAudioWrap::streamClose() +{ + if (isOpen()) + { + return Pa_CloseStream(this->stream); + } + else + { + return 1; + } +} + +void PortAudioWrap::terminate() +{ + Pa_Terminate(); +} + +void PortAudioWrap::stop() +{ + Pa_StopStream(stream); +} + +void PortAudioWrap::abort() +{ + Pa_AbortStream(stream); +} + +bool PortAudioWrap::isStopped() const +{ + PaError ret = Pa_IsStreamStopped(stream); + return ret; +} + +bool PortAudioWrap::isActive() const +{ + PaError ret = Pa_IsStreamActive(stream); + return ret; +} + +bool PortAudioWrap::isOpen() const +{ + return (stream != NULL); +} + +PaDeviceIndex PortAudioWrap::getDefaultInputDevice() +{ + return Pa_GetDefaultInputDevice(); +} + +PaDeviceIndex PortAudioWrap::getDefaultOutputDevice() +{ + return Pa_GetDefaultOutputDevice(); +} + +PaError PortAudioWrap::setInputChannelCount(int count) +{ +// if(!isActive()) +// { + inputBuffer.channelCount = count; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +PaError PortAudioWrap::setInputSampleFormat(PaSampleFormat format) +{ +// if(!isActive()) +// { + inputBuffer.sampleFormat = format; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +PaError PortAudioWrap::setInputLatency(PaTime latency) +{ +// if(!isActive()) +// { + inputBuffer.suggestedLatency = latency; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +void PortAudioWrap::setInputHostApiStreamInfo(void *info) +{ + inputBuffer.hostApiSpecificStreamInfo = info; +} + +PaTime PortAudioWrap::getInputDefaultLowLatency() +{ + return Pa_GetDeviceInfo(inputBuffer.device)->defaultLowInputLatency; +} + +PaError PortAudioWrap::setOutputChannelCount(int count) +{ +// if(!isActive()) +// { + outputBuffer.channelCount = count; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +PaError PortAudioWrap::setOutputSampleFormat(PaSampleFormat format) +{ +// if(!isActive()) +// { + outputBuffer.sampleFormat = format; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +PaError PortAudioWrap::setOutputLatency(PaTime latency) +{ +// if(!isOpen()) +// { + outputBuffer.suggestedLatency = latency; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +void PortAudioWrap::setOutputHostApiStreamInfo(void *info) +{ + outputBuffer.hostApiSpecificStreamInfo = info; +} + +PaTime PortAudioWrap::getOutputDefaultLowLatency() +{ + return Pa_GetDeviceInfo(inputBuffer.device)->defaultLowInputLatency; +} + +PaError PortAudioWrap::setFramesPerBuffer(unsigned long size) +{ +// if(!isOpen()) +// { + framesPerBuffer = size; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +PaError PortAudioWrap::setSampleRate(unsigned long rate) +{ +// if(!isOpen()) +// { + samplerate = rate; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +PaError PortAudioWrap::setStreamFlags(PaStreamFlags flags) +{ +// if(!isOpen()) +// { + statusFlags = flags; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +PaError PortAudioWrap::setInputDevice(PaDeviceIndex flags) +{ +// if(!isOpen()) +// { + inputDevice = flags; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +PaError PortAudioWrap::setOutputDevice(PaDeviceIndex flags) +{ +// if(!isOpen()) +// { + outputDevice = flags; + return paNoError; +// } +// return paStreamIsNotStopped; +} + +PaError PortAudioWrap::setCallback(PaStreamCallback *callback) +{ +// if(!isOpen()) +// { + streamCallback = callback; + return paNoError; +// } +// return paStreamIsNotStopped; +} + + + +// Non-linear amplifier with soft distortion curve. +float CubicAmplifier(float input) +{ + float output, temp; + if(input < 0.0) + { + temp = input + 1.0f; + output = (temp * temp * temp) - 1.0f; + } + else + { + temp = input - 1.0f; + output = (temp * temp * temp) + 1.0f; + } + return output; +} + +#define FUZZ(x) CubicAmplifier(CubicAmplifier(CubicAmplifier(CubicAmplifier(x)))) + +static int gNumNoInputs = 0; + +static int fuzzCallback(const void *inputBuffer, + void *outputBuffer, + unsigned long framesPerBuffer, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData) +{ + SAMPLE *out = (SAMPLE*)outputBuffer; + const SAMPLE *in = (const SAMPLE*)inputBuffer; + unsigned int i; + (void) timeInfo; // Prevent unused variable warnings. + (void) statusFlags; + (void) userData; + + if(inputBuffer == NULL) + { + for(i = 0; i < framesPerBuffer; i++) + { + *out++ = 0; // left - silent + *out++ = 0; // right - silent + } + gNumNoInputs += 1; + } + else + { + for(i = 0; i < framesPerBuffer; i++) + { + *out++ = FUZZ(*in++); // left - distorted + *out++ = *in++; // right - clean + } + } + return paContinue; +} + + +#if 1 +int main(void) +{ + PaError err; + PaDeviceIndex inputDevice; + PaDeviceIndex outputDevice; + + PortAudioWrap pa = PortAudioWrap(); + err = pa.init(); + + inputDevice = pa.getDefaultInputDevice(); // default input device + if(inputDevice == paNoDevice) + { + fprintf(stderr, "Error: No default input device.\n"); + goto error; + } + err = pa.setInputDevice(inputDevice); + err = pa.setInputChannelCount(2); // stereo input + err = pa.setInputSampleFormat(PA_SAMPLE_TYPE); + err = pa.setInputLatency(pa.getInputDefaultLowLatency()); + pa.setInputHostApiStreamInfo(NULL); + + outputDevice = pa.getDefaultOutputDevice(); // default output device + if (outputDevice == paNoDevice) + { + fprintf(stderr,"Error: No default output device.\n"); + goto error; + } + err = pa.setOutputDevice(inputDevice); + err = pa.setOutputChannelCount(2); // stereo input + err = pa.setOutputSampleFormat(PA_SAMPLE_TYPE); + err = pa.setOutputLatency(pa.getOutputDefaultLowLatency()); + pa.setOutputHostApiStreamInfo(NULL); + + err = pa.setFramesPerBuffer(FRAMES_PER_BUFFER); + err = pa.setSampleRate(SAMPLE_RATE); + err = pa.setStreamFlags(0); + err = pa.setCallback(fuzzCallback); + err = pa.streamOpen(); + + if(err != paNoError) + { + goto error; + } + err = pa.streamStart(); + if(err != paNoError) + { + goto error; + } + + printf("Hit ENTER to stop program.\n"); + getchar(); + err = pa.streamClose(); + if( err != paNoError ) + { + goto error; + } + printf("Finished. gNumNoInputs = %d\n", gNumNoInputs ); + pa.terminate(); + return 0; + +error: + Pa_Terminate(); + fprintf( stderr, "An error occured while using the portaudio stream\n" ); + fprintf( stderr, "Error number: %d\n", err ); + fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); + return -1; + +} + +#endif + diff --git a/fdmdv2/tests/pa_test/pa_class.h b/fdmdv2/tests/pa_test/pa_class.h new file mode 100644 index 00000000..e565e9dd --- /dev/null +++ b/fdmdv2/tests/pa_test/pa_class.h @@ -0,0 +1,75 @@ +#include +#include +#include "portaudio.h" + +// Note that many of the older ISA sound cards on PCs do NOT support +// full duplex audio (simultaneous record and playback). +// And some only support full duplex at lower sample rates. +#define SAMPLE_RATE (44100) +#define PA_SAMPLE_TYPE paFloat32 +#define FRAMES_PER_BUFFER (64) + +typedef float SAMPLE; + +float CubicAmplifier(float input); + +class PortAudioWrap +{ + public: + PortAudioWrap(); + ~PortAudioWrap(); + + private: + PaStream *stream; + PaStreamParameters inputBuffer; + PaStreamParameters outputBuffer; + void *userData; + int samplerate; + unsigned long framesPerBuffer; + PaStreamCallbackFlags statusFlags; + PaStreamCallback *streamCallback; + PaStreamFinishedCallback *streamFinishedCallback; + const PaStreamCallbackTimeInfo *timeInfo; + PaDeviceIndex inputDevice; + PaDeviceIndex outputDevice; + + public: + + PaError streamOpen(); + + PaDeviceIndex getDefaultInputDevice(); + PaDeviceIndex getDefaultOutputDevice(); + + PaStreamParameters *getDeviceInfo(PaDeviceIndex idx); + PaError setFramesPerBuffer(unsigned long size); + PaError setSampleRate(unsigned long size); + PaError setStreamFlags(PaStreamFlags flags); + PaError setCallback(PaStreamCallback *streamCallback); + PaError setStreamCallback(PaStream *stream, PaStreamCallback* callback ) { streamCallback = callback; return 0;} + PaError setStreamFinishedCallback(PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); + + PaError setInputDevice(PaDeviceIndex dev); + PaError setInputChannelCount(int count); + PaError setInputSampleFormat(PaSampleFormat format); + PaError setInputSampleRate(PaSampleFormat format); + PaError setInputLatency(PaTime latency); + void setInputHostApiStreamInfo(void *info = NULL); + PaTime getInputDefaultLowLatency(); + + PaError setOutputDevice(PaDeviceIndex dev); + PaError setOutputChannelCount(int count); + PaError setOutputSampleFormat(PaSampleFormat format); + PaError setOutputLatency(PaTime latency); + void setOutputHostApiStreamInfo(void *info = NULL); + PaTime getOutputDefaultLowLatency(); + + PaError init(); + PaError streamStart(); + PaError streamClose(); + void terminate(); + bool isOpen() const; + void stop(); + void abort(); + bool isStopped() const; + bool isActive() const; +}; diff --git a/fdmdv2/tests/pa_test/pa_test.mk b/fdmdv2/tests/pa_test/pa_test.mk new file mode 100644 index 00000000..710712d4 --- /dev/null +++ b/fdmdv2/tests/pa_test/pa_test.mk @@ -0,0 +1,103 @@ +## +## Auto Generated makefile by CodeLite IDE +## any manual changes will be erased +## +## Release +ProjectName :=pa_test +ConfigurationName :=Release +IntermediateDirectory :=./Release +OutDir := $(IntermediateDirectory) +WorkspacePath := "C:\Users\wittend\Projects\Radio\fdmdv2" +ProjectPath := "C:\Users\wittend\Projects\Radio\fdmdv2\pa_test" +CurrentFileName := +CurrentFilePath := +CurrentFileFullPath := +User :=wittend +Date :=6/18/2012 +CodeLitePath :="C:\Program Files\CodeLite" +LinkerName :=g++ +ArchiveTool :=ar rcus +SharedObjectLinkerName :=g++ -shared -fPIC +ObjectSuffix :=.o +DependSuffix :=.o.d +PreprocessSuffix :=.o.i +DebugSwitch :=-gstab +IncludeSwitch :=-I +LibrarySwitch :=-l +OutputSwitch :=-o +LibraryPathSwitch :=-L +PreprocessorSwitch :=-D +SourceSwitch :=-c +CompilerName :=g++ +C_CompilerName :=gcc +OutputFile :=$(IntermediateDirectory)/$(ProjectName) +Preprocessors := +ObjectSwitch :=-o +ArchiveOutputSwitch := +PreprocessOnlySwitch :=-E +ObjectsFileList :="C:\Users\wittend\Projects\Radio\fdmdv2\pa_test\pa_test.txt" +PCHCompileFlags := +MakeDirCommand :=makedir +CmpOptions := -O2 -Wall $(Preprocessors) +C_CmpOptions := -O2 -Wall $(Preprocessors) +LinkOptions := +IncludePath := $(IncludeSwitch). $(IncludeSwitch). $(IncludeSwitch)extern/include +IncludePCH := +RcIncludePath := +Libs := $(LibrarySwitch)portaudio +LibPath := $(LibraryPathSwitch). + + +## +## User defined environment variables +## +CodeLiteDir:=C:\Program Files\CodeLite +WXWIN:=C:\bin\wxWidgets-2.9.4 +PATH:=$(WXWIN)\lib\gcc_dll;$(PATH) +WXCFG:=gcc_dll\mswu +UNIT_TEST_PP_SRC_DIR:=C:\bin\UnitTest++-1.3 +Objects=$(IntermediateDirectory)/pa_class$(ObjectSuffix) + +## +## Main Build Targets +## +.PHONY: all clean PreBuild PrePreBuild PostBuild +all: $(OutputFile) + +$(OutputFile): $(IntermediateDirectory)/.d $(Objects) + @$(MakeDirCommand) $(@D) + @echo "" > $(IntermediateDirectory)/.d + @echo $(Objects) > $(ObjectsFileList) + $(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions) + +$(IntermediateDirectory)/.d: + @$(MakeDirCommand) "./Release" + +PreBuild: + + +## +## Objects +## +$(IntermediateDirectory)/pa_class$(ObjectSuffix): pa_class.cpp $(IntermediateDirectory)/pa_class$(DependSuffix) + $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_test/pa_class.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/pa_class$(ObjectSuffix) $(IncludePath) +$(IntermediateDirectory)/pa_class$(DependSuffix): pa_class.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/pa_class$(ObjectSuffix) -MF$(IntermediateDirectory)/pa_class$(DependSuffix) -MM "C:/Users/wittend/Projects/Radio/fdmdv2/pa_test/pa_class.cpp" + +$(IntermediateDirectory)/pa_class$(PreprocessSuffix): pa_class.cpp + @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/pa_class$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_test/pa_class.cpp" + + +-include $(IntermediateDirectory)/*$(DependSuffix) +## +## Clean +## +clean: + $(RM) $(IntermediateDirectory)/pa_class$(ObjectSuffix) + $(RM) $(IntermediateDirectory)/pa_class$(DependSuffix) + $(RM) $(IntermediateDirectory)/pa_class$(PreprocessSuffix) + $(RM) $(OutputFile) + $(RM) $(OutputFile).exe + $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-release\pa_test" + + diff --git a/fdmdv2/tests/pa_test/pa_test.project b/fdmdv2/tests/pa_test/pa_test.project new file mode 100644 index 00000000..c479d7dd --- /dev/null +++ b/fdmdv2/tests/pa_test/pa_test.project @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + diff --git a/fdmdv2/tests/pa_test/pa_test.txt b/fdmdv2/tests/pa_test/pa_test.txt new file mode 100644 index 00000000..7a5e00db --- /dev/null +++ b/fdmdv2/tests/pa_test/pa_test.txt @@ -0,0 +1 @@ +./Debug/pa_class.o diff --git a/fdmdv2/tests/pa_test/portaudio.dll b/fdmdv2/tests/pa_test/portaudio.dll new file mode 100644 index 00000000..9b292864 Binary files /dev/null and b/fdmdv2/tests/pa_test/portaudio.dll differ diff --git a/fdmdv2/tests/pa_test/sine.cxx b/fdmdv2/tests/pa_test/sine.cxx new file mode 100644 index 00000000..577a2472 --- /dev/null +++ b/fdmdv2/tests/pa_test/sine.cxx @@ -0,0 +1,137 @@ +// --------------------------------------------------------------------------------------- + +#include +#include +#include +#include +#include "portaudiocpp/PortAudioCpp.hxx" + +// --------------------------------------------------------------------------------------- + +// Some constants: +const int NUM_SECONDS = 5; +const double SAMPLE_RATE = 44100.0; +const int FRAMES_PER_BUFFER = 64; +const int TABLE_SIZE = 200; + +// --------------------------------------------------------------------------------------- + +// SineGenerator class: +class SineGenerator +{ +public: + SineGenerator(int tableSize) : tableSize_(tableSize), leftPhase_(0), rightPhase_(0) + { + const double PI = 3.14159265; + table_ = new float[tableSize]; + for (int i = 0; i < tableSize; ++i) + { + table_[i] = 0.125f * (float)sin(((double)i/(double)tableSize)*PI*2.); + } + } + + ~SineGenerator() + { + delete[] table_; + } + + int generate(const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, + const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags) + { + assert(outputBuffer != NULL); + + float **out = static_cast(outputBuffer); + + for (unsigned int i = 0; i < framesPerBuffer; ++i) + { + out[0][i] = table_[leftPhase_]; + out[1][i] = table_[rightPhase_]; + + leftPhase_ += 1; + if (leftPhase_ >= tableSize_) + leftPhase_ -= tableSize_; + + rightPhase_ += 3; + if (rightPhase_ >= tableSize_) + rightPhase_ -= tableSize_; + } + + return paContinue; + } + +private: + float *table_; + int tableSize_; + int leftPhase_; + int rightPhase_; +}; + +// --------------------------------------------------------------------------------------- + +// main: +int main(int, char *[]); +int main(int, char *[]) +{ + try + { + // Create a SineGenerator object: + SineGenerator sineGenerator(TABLE_SIZE); + + std::cout << "Setting up PortAudio..." << std::endl; + + // Set up the System: + portaudio::AutoSystem autoSys; + portaudio::System &sys = portaudio::System::instance(); + + // Set up the parameters required to open a (Callback)Stream: + portaudio::DirectionSpecificStreamParameters outParams(sys.defaultOutputDevice(), 2, portaudio::FLOAT32, false, sys.defaultOutputDevice().defaultLowOutputLatency(), NULL); + portaudio::StreamParameters params(portaudio::DirectionSpecificStreamParameters::null(), outParams, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff); + + std::cout << "Opening stereo output stream..." << std::endl; + + // Create (and open) a new Stream, using the SineGenerator::generate function as a callback: + portaudio::MemFunCallbackStream stream(params, sineGenerator, &SineGenerator::generate); + + std::cout << "Starting playback for " << NUM_SECONDS << " seconds." << std::endl; + + // Start the Stream (audio playback starts): + stream.start(); + + // Wait for 5 seconds: + sys.sleep(NUM_SECONDS * 1000); + + std::cout << "Closing stream..." <