From 6142c92f8b1358c1595c875ab220dc3d7a478e06 Mon Sep 17 00:00:00 2001 From: wittend99 Date: Sun, 20 May 2012 01:58:55 +0000 Subject: [PATCH] git-svn-id: https://svn.code.sf.net/p/freetel/code@485 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/extern/lib/libctb-0.16.so | Bin 0 -> 101423 bytes fdmdv2/fdmdv2.mk | 26 +- fdmdv2/fdmdv2.project | 4 - fdmdv2/fdmdv2.workspace | 4 +- fdmdv2/fdmdv2_main.h | 4 +- fdmdv2/fdmdv2_wsp.mk | 8 +- fdmdv2/pa_cppbinding_test/gui.cpp | 111 +- fdmdv2/pa_cppbinding_test/gui.fbp | 1589 +++++++---------- fdmdv2/pa_cppbinding_test/gui.h | 10 +- fdmdv2/pa_cppbinding_test/gui.py | 102 +- fdmdv2/pa_cppbinding_test/gui.xrc | 296 +-- fdmdv2/pa_cppbinding_test/main.cpp | 29 +- fdmdv2/pa_cppbinding_test/main.h | 5 + .../pa_cppbinding_test/pa_cppbinding_test.mk | 4 +- .../pa_cppbinding_test.project | 11 +- fdmdv2/thread_audio.cpp | 3 +- 16 files changed, 1033 insertions(+), 1173 deletions(-) create mode 100644 fdmdv2/extern/lib/libctb-0.16.so diff --git a/fdmdv2/extern/lib/libctb-0.16.so b/fdmdv2/extern/lib/libctb-0.16.so new file mode 100644 index 0000000000000000000000000000000000000000..08cbe000ac8a9ad2357d9d432719147260f3ec3e GIT binary patch literal 101423 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 L*SXyuLFfMi){*RY literal 0 HcmV?d00001 diff --git a/fdmdv2/fdmdv2.mk b/fdmdv2/fdmdv2.mk index 8dc37dad..5f0360f8 100644 --- a/fdmdv2/fdmdv2.mk +++ b/fdmdv2/fdmdv2.mk @@ -13,7 +13,7 @@ CurrentFileName := CurrentFilePath := CurrentFileFullPath := User :=wittend -Date :=5/17/2012 +Date :=5/18/2012 CodeLitePath :="C:\Program Files\CodeLite" LinkerName :=g++ ArchiveTool :=ar rcus @@ -56,7 +56,7 @@ WXWIN:=C:\bin\wxWidgets-2.9.2 PATH:=$(WXWIN)\lib\gcc_dll;$(PATH) WXCFG:=gcc_dll\mswu UNIT_TEST_PP_SRC_DIR:=C:\bin\UnitTest++-1.3 -Objects=$(IntermediateDirectory)/topFrame$(ObjectSuffix) $(IntermediateDirectory)/dlg_about$(ObjectSuffix) $(IntermediateDirectory)/dlg_audio$(ObjectSuffix) $(IntermediateDirectory)/dlg_options$(ObjectSuffix) $(IntermediateDirectory)/dlg_comports$(ObjectSuffix) $(IntermediateDirectory)/fdmdv2_plot$(ObjectSuffix) $(IntermediateDirectory)/fdmdv2_main$(ObjectSuffix) $(IntermediateDirectory)/thread_audio$(ObjectSuffix) $(IntermediateDirectory)/fdmdv2_thread_audio$(ObjectSuffix) +Objects=$(IntermediateDirectory)/topFrame$(ObjectSuffix) $(IntermediateDirectory)/dlg_about$(ObjectSuffix) $(IntermediateDirectory)/dlg_audio$(ObjectSuffix) $(IntermediateDirectory)/dlg_options$(ObjectSuffix) $(IntermediateDirectory)/dlg_comports$(ObjectSuffix) $(IntermediateDirectory)/fdmdv2_plot$(ObjectSuffix) $(IntermediateDirectory)/fdmdv2_main$(ObjectSuffix) ## ## Main Build Targets @@ -135,22 +135,6 @@ $(IntermediateDirectory)/fdmdv2_main$(DependSuffix): fdmdv2_main.cpp $(IntermediateDirectory)/fdmdv2_main$(PreprocessSuffix): fdmdv2_main.cpp @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/fdmdv2_main$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/fdmdv2_main.cpp" -$(IntermediateDirectory)/thread_audio$(ObjectSuffix): thread_audio.cpp $(IntermediateDirectory)/thread_audio$(DependSuffix) - $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/Radio/fdmdv2/thread_audio.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/thread_audio$(ObjectSuffix) $(IncludePath) -$(IntermediateDirectory)/thread_audio$(DependSuffix): thread_audio.cpp - @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/thread_audio$(ObjectSuffix) -MF$(IntermediateDirectory)/thread_audio$(DependSuffix) -MM "C:/Users/wittend/Projects/Radio/fdmdv2/thread_audio.cpp" - -$(IntermediateDirectory)/thread_audio$(PreprocessSuffix): thread_audio.cpp - @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/thread_audio$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/thread_audio.cpp" - -$(IntermediateDirectory)/fdmdv2_thread_audio$(ObjectSuffix): fdmdv2_thread_audio.cpp $(IntermediateDirectory)/fdmdv2_thread_audio$(DependSuffix) - $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/Radio/fdmdv2/fdmdv2_thread_audio.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/fdmdv2_thread_audio$(ObjectSuffix) $(IncludePath) -$(IntermediateDirectory)/fdmdv2_thread_audio$(DependSuffix): fdmdv2_thread_audio.cpp - @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/fdmdv2_thread_audio$(ObjectSuffix) -MF$(IntermediateDirectory)/fdmdv2_thread_audio$(DependSuffix) -MM "C:/Users/wittend/Projects/Radio/fdmdv2/fdmdv2_thread_audio.cpp" - -$(IntermediateDirectory)/fdmdv2_thread_audio$(PreprocessSuffix): fdmdv2_thread_audio.cpp - @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/fdmdv2_thread_audio$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/fdmdv2_thread_audio.cpp" - -include $(IntermediateDirectory)/*$(DependSuffix) ## @@ -178,12 +162,6 @@ clean: $(RM) $(IntermediateDirectory)/fdmdv2_main$(ObjectSuffix) $(RM) $(IntermediateDirectory)/fdmdv2_main$(DependSuffix) $(RM) $(IntermediateDirectory)/fdmdv2_main$(PreprocessSuffix) - $(RM) $(IntermediateDirectory)/thread_audio$(ObjectSuffix) - $(RM) $(IntermediateDirectory)/thread_audio$(DependSuffix) - $(RM) $(IntermediateDirectory)/thread_audio$(PreprocessSuffix) - $(RM) $(IntermediateDirectory)/fdmdv2_thread_audio$(ObjectSuffix) - $(RM) $(IntermediateDirectory)/fdmdv2_thread_audio$(DependSuffix) - $(RM) $(IntermediateDirectory)/fdmdv2_thread_audio$(PreprocessSuffix) $(RM) $(OutputFile) $(RM) $(OutputFile).exe $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-release\fdmdv2" diff --git a/fdmdv2/fdmdv2.project b/fdmdv2/fdmdv2.project index 883aea66..1a55b90b 100644 --- a/fdmdv2/fdmdv2.project +++ b/fdmdv2/fdmdv2.project @@ -15,8 +15,6 @@ - - @@ -26,8 +24,6 @@ - - diff --git a/fdmdv2/fdmdv2.workspace b/fdmdv2/fdmdv2.workspace index 9254a85e..1ac9a3cf 100644 --- a/fdmdv2/fdmdv2.workspace +++ b/fdmdv2/fdmdv2.workspace @@ -2,9 +2,9 @@ - + - + diff --git a/fdmdv2/fdmdv2_main.h b/fdmdv2/fdmdv2_main.h index 08f03fda..28b8f7e0 100644 --- a/fdmdv2/fdmdv2_main.h +++ b/fdmdv2/fdmdv2_main.h @@ -30,7 +30,7 @@ #include "dlg_options.h" #include "dlg_comports.h" #include "fdmdv2_plot.h" -#include "fdmdv2_thread_audio.h" +//#include "fdmdv2_thread_audio.h" #define WAV_FILE wxT("doggrowl.wav") @@ -86,7 +86,7 @@ class MainFrame : public TopFrame void OnThreadCompletion(wxThreadEvent&); protected: - Fdmdv2ThreadAudio *m_pThread; +// Fdmdv2ThreadAudio *m_pThread; wxCriticalSection m_pThreadCS; // protects the m_pThread pointer // protected event handlers virtual void OnCloseFrame(wxCloseEvent& event); diff --git a/fdmdv2/fdmdv2_wsp.mk b/fdmdv2/fdmdv2_wsp.mk index 13bc5fdc..359a9f63 100644 --- a/fdmdv2/fdmdv2_wsp.mk +++ b/fdmdv2/fdmdv2_wsp.mk @@ -1,8 +1,8 @@ .PHONY: clean All All: - @echo ----------Building project:[ pa_cppbinding_test - Release ]---------- - @cd "pa_cppbinding_test" && "mingw32-make.exe" -j 2 -f "pa_cppbinding_test.mk" + @echo ----------Building project:[ fdmdv2 - Release ]---------- + @"mingw32-make.exe" -j 2 -f "fdmdv2.mk" clean: - @echo ----------Cleaning project:[ pa_cppbinding_test - Release ]---------- - @cd "pa_cppbinding_test" && "mingw32-make.exe" -j 2 -f "pa_cppbinding_test.mk" clean + @echo ----------Cleaning project:[ fdmdv2 - Release ]---------- + @"mingw32-make.exe" -j 2 -f "fdmdv2.mk" clean diff --git a/fdmdv2/pa_cppbinding_test/gui.cpp b/fdmdv2/pa_cppbinding_test/gui.cpp index 1a2d09e2..812cbfca 100644 --- a/fdmdv2/pa_cppbinding_test/gui.cpp +++ b/fdmdv2/pa_cppbinding_test/gui.cpp @@ -29,92 +29,123 @@ MainFrameBase::MainFrameBase( wxWindow* parent, wxWindowID id, const wxString& t m_audioInfo = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_audioInfo->SetMinSize( wxSize( 65,65 ) ); - wxFlexGridSizer* fgSizer1; - fgSizer1 = new wxFlexGridSizer( 4, 4, 1, 1 ); - fgSizer1->AddGrowableCol( 3 ); - fgSizer1->AddGrowableRow( 3 ); - fgSizer1->SetFlexibleDirection( wxBOTH ); - fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_ALL ); + wxBoxSizer* bSizer17; + bSizer17 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer15; + bSizer15 = new wxBoxSizer( wxVERTICAL ); - fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 ); + wxBoxSizer* bSizer9; + bSizer9 = new wxBoxSizer( wxVERTICAL ); - m_staticText1 = new wxStaticText( m_audioInfo, wxID_ANY, _("Input, Output:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); - m_staticText1->Wrap( -1 ); - fgSizer1->Add( m_staticText1, 1, wxALL|wxEXPAND, 5 ); + wxBoxSizer* bSizer7; + bSizer7 = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* bSizer2; - bSizer2 = new wxBoxSizer( wxVERTICAL ); + bSizer2 = new wxBoxSizer( wxHORIZONTAL ); bSizer2->SetMinSize( wxSize( 65,65 ) ); - m_comboBoxLeft = new wxComboBox( m_audioInfo, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_SIMPLE ); + m_comboBoxLeft = new wxComboBox( m_audioInfo, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); m_comboBoxLeft->SetToolTip( _("Input Audio Interface") ); m_comboBoxLeft->SetMinSize( wxSize( 65,65 ) ); bSizer2->Add( m_comboBoxLeft, 1, wxALL|wxEXPAND, 5 ); - fgSizer1->Add( bSizer2, 1, wxEXPAND|wxFIXED_MINSIZE, 5 ); + bSizer7->Add( bSizer2, 1, wxEXPAND, 5 ); wxBoxSizer* bSizer3; - bSizer3 = new wxBoxSizer( wxVERTICAL ); + bSizer3 = new wxBoxSizer( wxHORIZONTAL ); bSizer3->SetMinSize( wxSize( 65,65 ) ); - m_comboBoxRight = new wxComboBox( m_audioInfo, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_SIMPLE ); + m_comboBoxRight = new wxComboBox( m_audioInfo, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); m_comboBoxRight->SetToolTip( _("Output Audio Interface") ); - m_comboBoxRight->SetMinSize( wxSize( 65,65 ) ); + m_comboBoxRight->SetMinSize( wxSize( 65,35 ) ); bSizer3->Add( m_comboBoxRight, 1, wxALL|wxEXPAND, 5 ); - fgSizer1->Add( bSizer3, 1, wxEXPAND, 5 ); + bSizer7->Add( bSizer3, 1, wxEXPAND, 5 ); - fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer9->Add( bSizer7, 1, wxEXPAND, 5 ); - m_staticText2 = new wxStaticText( m_audioInfo, wxID_ANY, _("Behavor:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); - m_staticText2->Wrap( -1 ); - fgSizer1->Add( m_staticText2, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL|wxEXPAND, 5 ); + + bSizer15->Add( bSizer9, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer10; + bSizer10 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer5; + bSizer5 = new wxBoxSizer( wxHORIZONTAL ); m_gauge1 = new wxGauge( m_audioInfo, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL|wxGA_SMOOTH ); - fgSizer1->Add( m_gauge1, 1, wxALL|wxEXPAND, 5 ); + bSizer5->Add( m_gauge1, 1, wxALL, 5 ); + + + bSizer10->Add( bSizer5, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer6; + bSizer6 = new wxBoxSizer( wxHORIZONTAL ); m_slider1 = new wxSlider( m_audioInfo, wxID_ANY, 50, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_SELRANGE|wxSL_TOP ); - fgSizer1->Add( m_slider1, 1, wxALL|wxEXPAND, 5 ); + bSizer6->Add( m_slider1, 1, wxALIGN_CENTER|wxALL|wxEXPAND, 5 ); + + + bSizer10->Add( bSizer6, 1, wxEXPAND, 5 ); + + + bSizer15->Add( bSizer10, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer14; + bSizer14 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer13; + bSizer13 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer12; + bSizer12 = new wxBoxSizer( wxVERTICAL ); - fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 ); + m_toggleBtn3 = new wxToggleButton( m_audioInfo, wxID_ANY, _("On / Off"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer12->Add( m_toggleBtn3, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + + bSizer13->Add( bSizer12, 1, 0, 5 ); - m_staticText5 = new wxStaticText( m_audioInfo, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText5->Wrap( -1 ); - fgSizer1->Add( m_staticText5, 1, wxALL|wxEXPAND, 5 ); + wxBoxSizer* bSizer11; + bSizer11 = new wxBoxSizer( wxVERTICAL ); m_toggleBtn2 = new wxToggleButton( m_audioInfo, wxID_ANY, _("On / Off"), wxDefaultPosition, wxDefaultSize, 0 ); m_toggleBtn2->SetValue( true ); - fgSizer1->Add( m_toggleBtn2, 1, wxALL|wxEXPAND, 5 ); + bSizer11->Add( m_toggleBtn2, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL, 5 ); + + + bSizer13->Add( bSizer11, 1, 0, 5 ); - m_toggleBtn3 = new wxToggleButton( m_audioInfo, wxID_ANY, _("On / Off"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtn3->SetValue( true ); - fgSizer1->Add( m_toggleBtn3, 0, wxALL|wxEXPAND, 5 ); + bSizer14->Add( bSizer13, 1, wxALIGN_BOTTOM|wxALIGN_RIGHT, 5 ); - fgSizer1->Add( 0, 0, 1, 0, 5 ); + bSizer15->Add( bSizer14, 0, wxEXPAND, 5 ); - fgSizer1->Add( 0, 0, 1, 0, 5 ); + bSizer17->Add( bSizer15, 1, wxEXPAND, 5 ); - fgSizer1->Add( 0, 0, 1, 0, 5 ); + wxBoxSizer* bSizer16; + bSizer16 = new wxBoxSizer( wxVERTICAL ); m_button1 = new wxButton( m_audioInfo, wxID_ANY, _("Exit"), wxDefaultPosition, wxDefaultSize, 0 ); m_button1->SetDefault(); - fgSizer1->Add( m_button1, 0, wxALIGN_BOTTOM|wxALIGN_RIGHT|wxALL, 5 ); + bSizer16->Add( m_button1, 0, 0, 5 ); - m_audioInfo->SetSizer( fgSizer1 ); + bSizer17->Add( bSizer16, 0, wxALIGN_BOTTOM|wxALIGN_RIGHT, 5 ); + + + m_audioInfo->SetSizer( bSizer17 ); m_audioInfo->Layout(); - fgSizer1->Fit( m_audioInfo ); - mainSizer->Add( m_audioInfo, 1, wxALL|wxEXPAND|wxFIXED_MINSIZE, 0 ); + bSizer17->Fit( m_audioInfo ); + mainSizer->Add( m_audioInfo, 1, wxEXPAND, 0 ); this->SetSizer( mainSizer ); @@ -137,8 +168,8 @@ MainFrameBase::MainFrameBase( wxWindow* parent, wxWindowID id, const wxString& t m_slider1->Connect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( MainFrameBase::OnScroll ), NULL, this ); m_slider1->Connect( wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler( MainFrameBase::OnScroll ), NULL, this ); m_slider1->Connect( wxEVT_SCROLL_CHANGED, wxScrollEventHandler( MainFrameBase::OnScroll ), NULL, this ); - m_toggleBtn2->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnTogLeft ), NULL, this ); m_toggleBtn3->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnTogRight ), NULL, this ); + m_toggleBtn2->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnTogLeft ), NULL, this ); m_button1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnExitClick ), NULL, this ); } @@ -158,8 +189,8 @@ MainFrameBase::~MainFrameBase() m_slider1->Disconnect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( MainFrameBase::OnScroll ), NULL, this ); m_slider1->Disconnect( wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler( MainFrameBase::OnScroll ), NULL, this ); m_slider1->Disconnect( wxEVT_SCROLL_CHANGED, wxScrollEventHandler( MainFrameBase::OnScroll ), NULL, this ); - m_toggleBtn2->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnTogLeft ), NULL, this ); m_toggleBtn3->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnTogRight ), NULL, this ); + m_toggleBtn2->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnTogLeft ), NULL, this ); m_button1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrameBase::OnExitClick ), NULL, this ); } diff --git a/fdmdv2/pa_cppbinding_test/gui.fbp b/fdmdv2/pa_cppbinding_test/gui.fbp index 3b3b63e8..03271f86 100644 --- a/fdmdv2/pa_cppbinding_test/gui.fbp +++ b/fdmdv2/pa_cppbinding_test/gui.fbp @@ -71,8 +71,8 @@ Resizable 1 - 500,300 - wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER + 577,365 + wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER Test PortAudio CPP Binding 0 @@ -228,7 +228,7 @@ none 0 - wxALL|wxEXPAND|wxFIXED_MINSIZE + wxEXPAND 1 1 @@ -308,231 +308,708 @@ - - 4 - wxBOTH - 3 - 3 - 1 + - fgSizer1 - wxFLEX_GROWMODE_ALL + bSizer17 + wxVERTICAL none - 4 - 1 - - 5 - wxEXPAND - 1 - - 0 - protected - 0 - - - - 5 - wxALL|wxEXPAND - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Input, Output: - - 0 - - - 0 - - 1 - m_staticText1 - 1 - - - protected - 1 - - Resizable - 1 - - wxALIGN_RIGHT - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxFIXED_MINSIZE + wxEXPAND 1 - 65,65 - bSizer2 + + bSizer15 wxVERTICAL none - + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND + 0 + + + bSizer9 + wxVERTICAL + none + + 5 + wxEXPAND + 1 + + + bSizer7 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + 65,65 + bSizer2 + wxHORIZONTAL + none + + 5 + wxALL|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_comboBoxLeft + 1 + + + protected + 1 + + Resizable + -1 + 1 + + + + 0 + Input Audio Interface + + wxFILTER_NONE + wxDefaultValidator + + + + + + + OnComboLeft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 65,65 + bSizer3 + wxHORIZONTAL + none + + 5 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + -1,-1 + + 0 + 65,35 + 1 + m_comboBoxRight + 1 + + + protected + 1 + + Resizable + -1 + 1 + + + + 0 + Output Audio Interface + + wxFILTER_NONE + wxDefaultValidator + + + + + + + OnComboRight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 - wxALL|wxEXPAND + 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_comboBoxLeft - 1 - - - protected - 1 - - Resizable - -1 - 1 - - wxCB_SIMPLE - - 0 - Input Audio Interface - - wxFILTER_NONE - wxDefaultValidator - - - - - - - OnComboLeft - - - - - - - - - - - - - - - - - - - - - - - - + + + bSizer10 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizer5 + wxHORIZONTAL + none + + 5 + wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_gauge1 + 1 + + + protected + 1 + + 100 + Resizable + 1 + + wxGA_HORIZONTAL|wxGA_SMOOTH + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer6 + 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 + 100 + + 0 + + 0 + + 0 + + 1 + m_slider1 + 1 + + + protected + 1 + + Resizable + 1 + + wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_SELRANGE|wxSL_TOP + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 50 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnScroll + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer14 + wxHORIZONTAL + none + + 5 + wxALIGN_BOTTOM|wxALIGN_RIGHT + 1 + + + bSizer13 + wxHORIZONTAL + none + + 5 + + 1 + + + bSizer12 + wxVERTICAL + 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 + On / Off + + 0 + + + 0 + + 1 + m_toggleBtn3 + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + OnTogRight + + + + + + + 5 + + 1 + + + bSizer11 + wxVERTICAL + none + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + On / Off + + 0 + + + 0 + + 1 + m_toggleBtn2 + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + OnTogLeft + + + + + + + 5 - wxEXPAND - 1 + wxALIGN_BOTTOM|wxALIGN_RIGHT + 0 - 65,65 - bSizer3 + + bSizer16 wxVERTICAL none 5 - wxALL|wxEXPAND - 1 - + + 0 + 1 1 1 @@ -546,10 +1023,10 @@ 1 0 - 1 1 + 1 0 Dock 0 @@ -561,14 +1038,15 @@ 0 0 wxID_ANY + Exit 0 0 - 65,65 + 1 - m_comboBoxRight + m_button1 1 @@ -576,23 +1054,21 @@ 1 Resizable - -1 1 - wxCB_SIMPLE + 0 - Output Audio Interface + wxFILTER_NONE wxDefaultValidator - + OnExitClick - OnComboRight @@ -614,694 +1090,11 @@ - - - - 5 - wxEXPAND - 1 - - 0 - protected - 0 - - - - 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL|wxEXPAND - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Behavor: - - 0 - - - 0 - - 1 - m_staticText2 - 1 - - - protected - 1 - - Resizable - 1 - - wxALIGN_RIGHT - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - 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_gauge1 - 1 - - - protected - 1 - - 100 - Resizable - 1 - - wxGA_HORIZONTAL|wxGA_SMOOTH - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - 100 - - 0 - - 0 - - 0 - - 1 - m_slider1 - 1 - - - protected - 1 - - Resizable - 1 - - wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_SELRANGE|wxSL_TOP - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - 50 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OnScroll - - - - - - - - - - - - - - - - 5 - wxEXPAND - 1 - - 0 - protected - 0 - - - - 5 - 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_staticText5 - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - On / Off - - 0 - - - 0 - - 1 - m_toggleBtn2 - 1 - - - protected - 1 - - Resizable - 1 - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - OnTogLeft - - - - - 5 - wxALL|wxEXPAND - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - On / Off - - 0 - - - 0 - - 1 - m_toggleBtn3 - 1 - - - protected - 1 - - Resizable - 1 - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - OnTogRight - - - - - 5 - - 1 - - 0 - protected - 0 - - - - 5 - - 1 - - 0 - protected - 0 - - - - 5 - - 1 - - 0 - protected - 0 - - - - 5 - wxALIGN_BOTTOM|wxALIGN_RIGHT|wxALL - 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 - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/fdmdv2/pa_cppbinding_test/gui.h b/fdmdv2/pa_cppbinding_test/gui.h index b0fd86e1..e27f921a 100644 --- a/fdmdv2/pa_cppbinding_test/gui.h +++ b/fdmdv2/pa_cppbinding_test/gui.h @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -45,15 +44,12 @@ class MainFrameBase : public wxFrame wxMenuBar* m_menuBar; wxMenu* m_menuFile; wxPanel* m_audioInfo; - wxStaticText* m_staticText1; wxComboBox* m_comboBoxLeft; wxComboBox* m_comboBoxRight; - wxStaticText* m_staticText2; wxGauge* m_gauge1; wxSlider* m_slider1; - wxStaticText* m_staticText5; - wxToggleButton* m_toggleBtn2; wxToggleButton* m_toggleBtn3; + wxToggleButton* m_toggleBtn2; wxButton* m_button1; wxStatusBar* m_statusBar; @@ -63,13 +59,13 @@ class MainFrameBase : public wxFrame virtual void OnComboLeft( wxCommandEvent& event ) { event.Skip(); } virtual void OnComboRight( wxCommandEvent& event ) { event.Skip(); } virtual void OnScroll( wxScrollEvent& event ) { event.Skip(); } - virtual void OnTogLeft( wxCommandEvent& event ) { event.Skip(); } virtual void OnTogRight( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTogLeft( 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( 500,300 ), long style = wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL ); + MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Test PortAudio CPP Binding "), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 577,365 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL ); ~MainFrameBase(); diff --git a/fdmdv2/pa_cppbinding_test/gui.py b/fdmdv2/pa_cppbinding_test/gui.py index 30ef15d1..021031a2 100644 --- a/fdmdv2/pa_cppbinding_test/gui.py +++ b/fdmdv2/pa_cppbinding_test/gui.py @@ -20,7 +20,7 @@ _ = gettext.gettext 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( 500,300 ), style = wx.CLOSE_BOX|wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER|wx.TAB_TRAVERSAL ) + wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = _(u"Test PortAudio CPP Binding "), pos = wx.DefaultPosition, size = wx.Size( 577,365 ), style = wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER|wx.TAB_TRAVERSAL ) self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize ) @@ -38,91 +38,111 @@ class MainFrameBase ( wx.Frame ): self.m_audioInfo = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) self.m_audioInfo.SetMinSize( wx.Size( 65,65 ) ) - fgSizer1 = wx.FlexGridSizer( 4, 4, 1, 1 ) - fgSizer1.AddGrowableCol( 3 ) - fgSizer1.AddGrowableRow( 3 ) - fgSizer1.SetFlexibleDirection( wx.BOTH ) - fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_ALL ) + bSizer17 = wx.BoxSizer( wx.VERTICAL ) + bSizer15 = wx.BoxSizer( wx.VERTICAL ) - fgSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 ) + bSizer9 = wx.BoxSizer( wx.VERTICAL ) - self.m_staticText1 = wx.StaticText( self.m_audioInfo, wx.ID_ANY, _(u"Input, Output:"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT ) - self.m_staticText1.Wrap( -1 ) - fgSizer1.Add( self.m_staticText1, 1, wx.ALL|wx.EXPAND, 5 ) + bSizer7 = wx.BoxSizer( wx.HORIZONTAL ) - bSizer2 = wx.BoxSizer( wx.VERTICAL ) + bSizer2 = wx.BoxSizer( wx.HORIZONTAL ) bSizer2.SetMinSize( wx.Size( 65,65 ) ) m_comboBoxLeftChoices = [] - self.m_comboBoxLeft = wx.ComboBox( self.m_audioInfo, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, m_comboBoxLeftChoices, wx.CB_SIMPLE ) + self.m_comboBoxLeft = wx.ComboBox( self.m_audioInfo, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, m_comboBoxLeftChoices, 0 ) self.m_comboBoxLeft.SetToolTipString( _(u"Input Audio Interface") ) self.m_comboBoxLeft.SetMinSize( wx.Size( 65,65 ) ) bSizer2.Add( self.m_comboBoxLeft, 1, wx.ALL|wx.EXPAND, 5 ) - fgSizer1.Add( bSizer2, 1, wx.EXPAND|wx.FIXED_MINSIZE, 5 ) + bSizer7.Add( bSizer2, 1, wx.EXPAND, 5 ) - bSizer3 = wx.BoxSizer( wx.VERTICAL ) + bSizer3 = wx.BoxSizer( wx.HORIZONTAL ) bSizer3.SetMinSize( wx.Size( 65,65 ) ) m_comboBoxRightChoices = [] - self.m_comboBoxRight = wx.ComboBox( self.m_audioInfo, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, m_comboBoxRightChoices, wx.CB_SIMPLE ) + self.m_comboBoxRight = wx.ComboBox( self.m_audioInfo, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, m_comboBoxRightChoices, 0 ) self.m_comboBoxRight.SetToolTipString( _(u"Output Audio Interface") ) - self.m_comboBoxRight.SetMinSize( wx.Size( 65,65 ) ) + self.m_comboBoxRight.SetMinSize( wx.Size( 65,35 ) ) bSizer3.Add( self.m_comboBoxRight, 1, wx.ALL|wx.EXPAND, 5 ) - fgSizer1.Add( bSizer3, 1, wx.EXPAND, 5 ) + bSizer7.Add( bSizer3, 1, wx.EXPAND, 5 ) - fgSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 ) + bSizer9.Add( bSizer7, 1, wx.EXPAND, 5 ) - self.m_staticText2 = wx.StaticText( self.m_audioInfo, wx.ID_ANY, _(u"Behavor:"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT ) - self.m_staticText2.Wrap( -1 ) - fgSizer1.Add( self.m_staticText2, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL|wx.EXPAND, 5 ) + + bSizer15.Add( bSizer9, 0, wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, 5 ) + + bSizer10 = wx.BoxSizer( wx.HORIZONTAL ) + + bSizer5 = wx.BoxSizer( wx.HORIZONTAL ) self.m_gauge1 = wx.Gauge( self.m_audioInfo, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL|wx.GA_SMOOTH ) - fgSizer1.Add( self.m_gauge1, 1, wx.ALL|wx.EXPAND, 5 ) + bSizer5.Add( self.m_gauge1, 1, wx.ALL, 5 ) + + + bSizer10.Add( bSizer5, 1, wx.EXPAND, 5 ) + + bSizer6 = wx.BoxSizer( wx.HORIZONTAL ) self.m_slider1 = wx.Slider( self.m_audioInfo, wx.ID_ANY, 50, 0, 100, wx.DefaultPosition, wx.DefaultSize, wx.SL_AUTOTICKS|wx.SL_HORIZONTAL|wx.SL_SELRANGE|wx.SL_TOP ) - fgSizer1.Add( self.m_slider1, 1, wx.ALL|wx.EXPAND, 5 ) + bSizer6.Add( self.m_slider1, 1, wx.ALIGN_CENTER|wx.ALL|wx.EXPAND, 5 ) + + + bSizer10.Add( bSizer6, 1, wx.EXPAND, 5 ) + + + bSizer15.Add( bSizer10, 1, wx.EXPAND, 5 ) + + bSizer14 = wx.BoxSizer( wx.HORIZONTAL ) + + bSizer13 = wx.BoxSizer( wx.HORIZONTAL ) + + bSizer12 = wx.BoxSizer( wx.VERTICAL ) + + self.m_toggleBtn3 = wx.ToggleButton( self.m_audioInfo, wx.ID_ANY, _(u"On / Off"), wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer12.Add( self.m_toggleBtn3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) - fgSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 ) + bSizer13.Add( bSizer12, 1, 0, 5 ) - self.m_staticText5 = wx.StaticText( self.m_audioInfo, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_staticText5.Wrap( -1 ) - fgSizer1.Add( self.m_staticText5, 1, wx.ALL|wx.EXPAND, 5 ) + bSizer11 = wx.BoxSizer( wx.VERTICAL ) self.m_toggleBtn2 = wx.ToggleButton( self.m_audioInfo, wx.ID_ANY, _(u"On / Off"), wx.DefaultPosition, wx.DefaultSize, 0 ) self.m_toggleBtn2.SetValue( True ) - fgSizer1.Add( self.m_toggleBtn2, 1, wx.ALL|wx.EXPAND, 5 ) + bSizer11.Add( self.m_toggleBtn2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 ) - self.m_toggleBtn3 = wx.ToggleButton( self.m_audioInfo, wx.ID_ANY, _(u"On / Off"), wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_toggleBtn3.SetValue( True ) - fgSizer1.Add( self.m_toggleBtn3, 0, wx.ALL|wx.EXPAND, 5 ) + + bSizer13.Add( bSizer11, 1, 0, 5 ) - fgSizer1.AddSpacer( ( 0, 0), 1, 0, 5 ) + bSizer14.Add( bSizer13, 1, wx.ALIGN_BOTTOM|wx.ALIGN_RIGHT, 5 ) - fgSizer1.AddSpacer( ( 0, 0), 1, 0, 5 ) + bSizer15.Add( bSizer14, 0, wx.EXPAND, 5 ) - fgSizer1.AddSpacer( ( 0, 0), 1, 0, 5 ) + bSizer17.Add( bSizer15, 1, 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() - fgSizer1.Add( self.m_button1, 0, wx.ALIGN_BOTTOM|wx.ALIGN_RIGHT|wx.ALL, 5 ) + bSizer16.Add( self.m_button1, 0, 0, 5 ) + + + bSizer17.Add( bSizer16, 0, wx.ALIGN_BOTTOM|wx.ALIGN_RIGHT, 5 ) - self.m_audioInfo.SetSizer( fgSizer1 ) + self.m_audioInfo.SetSizer( bSizer17 ) self.m_audioInfo.Layout() - fgSizer1.Fit( self.m_audioInfo ) - mainSizer.Add( self.m_audioInfo, 1, wx.ALL|wx.EXPAND|wx.FIXED_MINSIZE, 0 ) + bSizer17.Fit( self.m_audioInfo ) + mainSizer.Add( self.m_audioInfo, 1, wx.EXPAND, 0 ) self.SetSizer( mainSizer ) @@ -137,8 +157,8 @@ class MainFrameBase ( wx.Frame ): self.m_comboBoxLeft.Bind( wx.EVT_COMBOBOX, self.OnComboLeft ) self.m_comboBoxRight.Bind( wx.EVT_COMBOBOX, self.OnComboRight ) self.m_slider1.Bind( wx.EVT_SCROLL, self.OnScroll ) - self.m_toggleBtn2.Bind( wx.EVT_TOGGLEBUTTON, self.OnTogLeft ) self.m_toggleBtn3.Bind( wx.EVT_TOGGLEBUTTON, self.OnTogRight ) + self.m_toggleBtn2.Bind( wx.EVT_TOGGLEBUTTON, self.OnTogLeft ) self.m_button1.Bind( wx.EVT_BUTTON, self.OnExitClick ) def __del__( self ): @@ -161,10 +181,10 @@ class MainFrameBase ( wx.Frame ): def OnScroll( self, event ): event.Skip() - def OnTogLeft( self, event ): + def OnTogRight( self, event ): event.Skip() - def OnTogRight( self, event ): + def OnTogLeft( self, event ): event.Skip() diff --git a/fdmdv2/pa_cppbinding_test/gui.xrc b/fdmdv2/pa_cppbinding_test/gui.xrc index a7a3148b..b64fad7c 100644 --- a/fdmdv2/pa_cppbinding_test/gui.xrc +++ b/fdmdv2/pa_cppbinding_test/gui.xrc @@ -1,8 +1,8 @@ - - 500,300 + + 577,365 Test PortAudio CPP Binding 1 0 @@ -18,166 +18,182 @@ - - 4 - 4 - 1 - 1 - 3 - 3 - - - wxEXPAND - 5 - 0,0 - - - - wxALL|wxEXPAND - 5 - - - - -1 - - + + wxVERTICAL - wxEXPAND|wxFIXED_MINSIZE + wxEXPAND 5 - 65,65 wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxEXPAND + 5 + + wxVERTICAL + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxEXPAND + 5 + + 65,65 + wxHORIZONTAL + + + wxALL|wxEXPAND + 5 + + Input Audio Interface + + + + + + + + + wxEXPAND + 5 + + 65,65 + wxHORIZONTAL + + + wxALL|wxEXPAND + 5 + + Output Audio Interface + + + + + + + + + + - wxALL|wxEXPAND + wxEXPAND 5 - - - Input Audio Interface - - + + wxHORIZONTAL + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 100 + 0 + + + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALIGN_CENTER|wxALL|wxEXPAND + 5 + + + 50 + 0 + 100 + + + + + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALIGN_BOTTOM|wxALIGN_RIGHT + 5 + + wxHORIZONTAL + + + + 5 + + wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 5 + + + 0 + + + + + + + + 5 + + wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 5 + + + 1 + + + + + + - - wxEXPAND + + wxALIGN_BOTTOM|wxALIGN_RIGHT 5 - 65,65 wxVERTICAL - - wxALL|wxEXPAND + + 5 - - - Output Audio Interface - - + + + 1 - - - wxEXPAND - 5 - 0,0 - - - - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL|wxEXPAND - 5 - - - - -1 - - - - - wxALL|wxEXPAND - 5 - - - 100 - 0 - - - - - wxALL|wxEXPAND - 5 - - - 50 - 0 - 100 - - - - - wxEXPAND - 5 - 0,0 - - - - wxALL|wxEXPAND - 5 - - - -1 - - - - - wxALL|wxEXPAND - 5 - - - 1 - - - - - wxALL|wxEXPAND - 5 - - - 1 - - - - - - 5 - 0,0 - - - - - 5 - 0,0 - - - - - 5 - 0,0 - - - - wxALIGN_BOTTOM|wxALIGN_RIGHT|wxALL - 5 - - - 1 - - diff --git a/fdmdv2/pa_cppbinding_test/main.cpp b/fdmdv2/pa_cppbinding_test/main.cpp index 24aecd4f..f3be47f9 100644 --- a/fdmdv2/pa_cppbinding_test/main.cpp +++ b/fdmdv2/pa_cppbinding_test/main.cpp @@ -51,6 +51,31 @@ 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::OnTogLeft( wxCommandEvent& event ) +{ + event.Skip(); +} + +void MainFrame::OnTogRight( wxCommandEvent& event ) +{ + event.Skip(); +} + void MainFrame::printSupportedStandardSampleRates( const portaudio::DirectionSpecificStreamParameters &inputParameters, const portaudio::DirectionSpecificStreamParameters &outputParameters) @@ -164,7 +189,7 @@ int MainFrame::populateAudioInfo() 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 +#ifdef WIN32_ASIO // ASIO specific latency information: if ((*i).hostApi().typeId() == paASIO) { @@ -183,7 +208,7 @@ int MainFrame::populateAudioInfo() std::cout << "ASIO buffer granularity = " << asioDevice.granularity() << std::endl; } } -#endif // WIN32 +#endif // WIN32_ASIO std::cout << "Default sample rate = " << (*i).defaultSampleRate() << std::endl; // 8.2 diff --git a/fdmdv2/pa_cppbinding_test/main.h b/fdmdv2/pa_cppbinding_test/main.h index 5684cd66..b60de671 100644 --- a/fdmdv2/pa_cppbinding_test/main.h +++ b/fdmdv2/pa_cppbinding_test/main.h @@ -55,6 +55,11 @@ class MainFrame : public MainFrameBase const portaudio::DirectionSpecificStreamParameters &inputParameters, const portaudio::DirectionSpecificStreamParameters &outputParameters); int populateAudioInfo(); + void OnComboLeft( wxCommandEvent& event ); + void OnComboRight( wxCommandEvent& event ); + void OnScroll( wxScrollEvent& event ); + void OnTogLeft( wxCommandEvent& event ); + void OnTogRight( wxCommandEvent& event ); }; #endif //__main__ diff --git a/fdmdv2/pa_cppbinding_test/pa_cppbinding_test.mk b/fdmdv2/pa_cppbinding_test/pa_cppbinding_test.mk index 7c2527c9..c93a9361 100644 --- a/fdmdv2/pa_cppbinding_test/pa_cppbinding_test.mk +++ b/fdmdv2/pa_cppbinding_test/pa_cppbinding_test.mk @@ -44,8 +44,8 @@ LinkOptions := -mwindows -s $(shell wx-config --debug=no --libs --un IncludePath := $(IncludeSwitch). $(IncludeSwitch)./ $(IncludeSwitch)C:/bin/MinGW/msys/1.0/local/include $(IncludeSwitch)./portaudiocpp IncludePCH := RcIncludePath := -Libs := $(LibrarySwitch)portaudiocpp.la $(LibrarySwitch)portaudio.la -LibPath := $(LibraryPathSwitch). $(LibraryPathSwitch). $(LibraryPathSwitch)../../extern/lib/ +Libs := $(LibrarySwitch)portaudiocpp $(LibrarySwitch)portaudio +LibPath := $(LibraryPathSwitch). $(LibraryPathSwitch). ## diff --git a/fdmdv2/pa_cppbinding_test/pa_cppbinding_test.project b/fdmdv2/pa_cppbinding_test/pa_cppbinding_test.project index 066f5a17..b0051278 100644 --- a/fdmdv2/pa_cppbinding_test/pa_cppbinding_test.project +++ b/fdmdv2/pa_cppbinding_test/pa_cppbinding_test.project @@ -55,9 +55,9 @@ - - - + + + @@ -99,9 +99,8 @@ - - - + + diff --git a/fdmdv2/thread_audio.cpp b/fdmdv2/thread_audio.cpp index 72793fdc..d5c465c3 100644 --- a/fdmdv2/thread_audio.cpp +++ b/fdmdv2/thread_audio.cpp @@ -38,7 +38,7 @@ static int audioCallback( void *inputBuffer, void *outputBuffer, unsigned long f } return 0; } - +#ifdef PORTAUDIO_MAIN /* Use a PortAudioStream to process audio data. */ int main(void) { @@ -53,3 +53,4 @@ int main(void) Pa_Terminate(); return 0; } +#endif //PORTAUDIO_MAIN -- 2.25.1