X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fwx%2Fsrc%2FbbwxComboBox.cxx;h=fe33889c4566fd674672e0e2d6522f308b550337;hb=0345dcb3faf8bb412c0996a5443cb9b9046423b3;hp=06ec5912e0d115e929e31be9711424aab6d10a51;hpb=0c810ab19d1d6ee1fd14a54ea6e1ff3f4d9f89f0;p=bbtk.git diff --git a/packages/wx/src/bbwxComboBox.cxx b/packages/wx/src/bbwxComboBox.cxx index 06ec591..fe33889 100644 --- a/packages/wx/src/bbwxComboBox.cxx +++ b/packages/wx/src/bbwxComboBox.cxx @@ -12,6 +12,8 @@ #include #include +#include + namespace bbwx { //-------------------------------------------------------------------------- @@ -31,10 +33,14 @@ namespace bbwx void FillItems( int iSelection, std::vector< std::string > lstIn); void VerifyDeselect(int iSelection); + void OnSpinCtrlClick(wxCommandEvent& event); + + private: int mTypeForm; ComboBox *mBox; - wxItemContainer* itemcontainer; + wxItemContainer *itemcontainer; + wxSpinButton *mwxspinbutton; }; @@ -58,6 +64,7 @@ namespace bbwx mBox(box), mTypeForm(typeForm) { + mwxspinbutton = NULL; itemcontainer = NULL; wxPanel *panel = this; int i; @@ -65,10 +72,15 @@ namespace bbwx // 2) Insertion of the components in the window // We use a FlexGridSizer - wxFlexGridSizer *sizer = new wxFlexGridSizer(1); +// wxFlexGridSizer *sizerV = new wxFlexGridSizer(1); +// wxFlexGridSizer *sizerH1 = new wxFlexGridSizer(0); +// wxFlexGridSizer *sizerH2 = new wxFlexGridSizer(2); + wxFlexGridSizer *sizer = new wxFlexGridSizer(2); + if (title!="") { sizer->Add( new wxStaticText(panel,-1, bbtk::std2wx(title) ) ); + sizer->Add( new wxStaticText(panel,-1, _T("") ) ); } //--------------------------------------------------------------------- if (mTypeForm==1) @@ -77,7 +89,7 @@ namespace bbwx itemcontainer=wxlistbox; sizer->Add( wxlistbox,1,wxEXPAND ); Connect( wxlistbox->GetId(), - wxEVT_COMMAND_LISTBOX_SELECTED, (wxObjectEventFunction) (void (wxPanel::*)(wxEvent&))&ComboBoxWidget::OnComboBox ); + wxEVT_COMMAND_LISTBOX_SELECTED, (wxObjectEventFunction) (void (wxPanel::*)(wxEvent&))&ComboBoxWidget::OnComboBox ); } else if (mTypeForm==0) { wxChoice *wxchoice = new wxChoice ( panel , -1, wxDefaultPosition,wxSize(sizeX,sizeY)); itemcontainer=wxchoice; @@ -85,14 +97,21 @@ namespace bbwx Connect( wxchoice->GetId(), wxEVT_COMMAND_CHOICE_SELECTED, (wxObjectEventFunction) (void (wxPanel::*)(wxEvent&))&ComboBoxWidget::OnComboBox ); } - sizer->AddGrowableCol(0); - panel->SetSizer(sizer); - for (i=0;ibbGetInputWithSpinButton()==true) { - itemcontainer->Append( bbtk::std2wx( lstIn[i] ) ); - } // for i -// itemcontainer->SetSelection(iSelection); + mwxspinbutton = new wxSpinButton( panel, -1 ); + Connect( mwxspinbutton->GetId(), + wxEVT_SPIN, + (wxObjectEventFunction) + (void (wxPanel::*)(wxScrollEvent&)) + &ComboBoxWidget::OnSpinCtrlClick); + sizer->Add( mwxspinbutton,1,wxEXPAND ); + } + sizer->AddGrowableCol(0); + + panel->SetSizer(sizer); + FillItems( iSelection,lstIn ); } //------------------------------------------------------------------------- @@ -119,7 +138,13 @@ namespace bbwx { mBox->bbSetInputSelection( iSelection ); mBox->bbSetOutputOut( iSelection ); - mBox->bbSetOutputOutString( bbtk::wx2std( itemcontainer->GetString(iSelection) ) ); + +// Patch to clean the spaces at the begining + std::string tmpStr = bbtk::wx2std( itemcontainer->GetString(iSelection) ); + if (tmpStr.length()>0) { while(tmpStr[0]==' ') tmpStr.erase(0,1); } + mBox->bbSetOutputOutString( tmpStr ); +// mBox->bbSetOutputOutString( bbtk::wx2std( itemcontainer->GetString(iSelection) ) ); + mBox->bbSignalOutputModification(); VerifyDeselect(iSelection); if (mTypeForm==0) @@ -137,19 +162,73 @@ namespace bbwx //-------------------------------------------------------------------------- void ComboBoxWidget::OnComboBox(wxEvent& event) { - OnComboBoxSelection( itemcontainer->GetSelection() ); + int iSelection = itemcontainer->GetSelection(); + OnComboBoxSelection( iSelection ); + if (mBox->bbGetInputWithSpinButton()==true) + { + mwxspinbutton->SetValue( iSelection ); + } + } +//-------------------------------------------------------------------------- +void ComboBoxWidget::OnSpinCtrlClick(wxCommandEvent& event) +{ + int iSelection = mwxspinbutton->GetValue(); + itemcontainer->SetSelection(iSelection); + OnComboBoxSelection( iSelection ); +} + + //-------------------------------------------------------------------------- void ComboBoxWidget::FillItems( int iSelection, std::vector< std::string > lstIn ) { - int i; + int i,size = lstIn.size(); + + +#if defined(_WIN32) + // Patch to put spaces at the beginin +#else + // Patch to put spaces at the beginin + int strLength=-1; + // Looking for the longest string + for (i=0 ;iClear(); - for (i=0;iAppend( bbtk::std2wx( lstIn[i] ) ); } // for i - if (iSelection>=0) itemcontainer->SetSelection(iSelection); + if (iSelection>=0) + { + itemcontainer->SetSelection(iSelection); + if (mBox->bbGetInputWithSpinButton()==true) + { + mwxspinbutton->SetRange( 0,size-1 ); + mwxspinbutton->SetValue( iSelection ); + } + + } // iSelection + + if (mTypeForm==0) + { + ((wxChoice*)itemcontainer)->SetAutoLayout( true ); + ((wxChoice*)itemcontainer)->Layout( ); + } // if mTypeForm } BBTK_ADD_BLACK_BOX_TO_PACKAGE(wx,ComboBox) @@ -161,15 +240,15 @@ BBTK_BLACK_BOX_IMPLEMENTATION(ComboBox,bbtk::WxBlackBox); void ComboBox::Process() { int iSelection = bbGetInputSelection(); - if (bbGetInputSelection() >= bbGetInputIn().size()) { iSelection=bbGetInputIn().size()-1; } -// if (bbGetInputSelection() >= bbGetInputIn().size()) { iSelection=0; } +// if (bbGetInputSelection() >= bbGetInputIn().size()) { iSelection=bbGetInputIn().size()-1; } + if (bbGetInputSelection() >= bbGetInputIn().size()) { iSelection=0; } ComboBoxWidget *w = (ComboBoxWidget*)bbGetOutputWidget(); w->FillItems( iSelection, bbGetInputIn() ); bbSetInputSelection( iSelection ); bbSetOutputOut( iSelection ); int size = bbGetInputIn().size(); if ( (iSelection>=0) && ( iSelectionVerifyDeselect(iSelection); @@ -205,6 +284,7 @@ void ComboBox::bbUserSetDefaultValues() bbSetInputWinWidth(10); bbSetInputWinHeight(45); bbSetInputDeselect(false); + bbSetInputWithSpinButton(false); } //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)