X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fwx%2Fsrc%2FbbwxComboBox.cxx;h=f0c3cc5d23de828a180d3a8ed0fd9fafb7ac11d2;hb=9834268e7f5831df43fb680b25206b05b873c94c;hp=234a0e6c2444949c38f7fa14a22ec1b3207661f0;hpb=ad458230343cabfb02926d50ac0f8e17de477085;p=bbtk.git diff --git a/packages/wx/src/bbwxComboBox.cxx b/packages/wx/src/bbwxComboBox.cxx index 234a0e6..f0c3cc5 100644 --- a/packages/wx/src/bbwxComboBox.cxx +++ b/packages/wx/src/bbwxComboBox.cxx @@ -4,7 +4,6 @@ #include "bbwxComboBox.h" #include "bbwxPackage.h" - #include #include @@ -12,6 +11,8 @@ #include #include +#include + namespace bbwx { //-------------------------------------------------------------------------- @@ -20,22 +21,25 @@ namespace bbwx { public: ComboBoxWidget( ComboBox* box, wxWindow *parent, - int iSelection, - std::string title, - std::vector< std::string > lstIn, - int typeForm ); - + int iSelection, + std::string title, + std::vector< std::string > lstIn, + int typeForm, + int sizeX, int sizeY ); ~ComboBoxWidget(); - + void OnComboBoxSelection(int iSelection); void OnComboBox(wxEvent& event); void FillItems( int iSelection, std::vector< std::string > lstIn); + void VerifyDeselect(int iSelection); + + void OnSpinCtrlClick(wxCommandEvent& event); private: - int mTypeForm; + int mTypeForm; ComboBox *mBox; - wxListBox *wxlistbox; - wxChoice *wxchoice; + wxItemContainer *itemcontainer; + wxSpinButton *mwxspinbutton; }; @@ -46,151 +50,232 @@ namespace bbwx //------------------------------------------------------------------------- ComboBoxWidget::ComboBoxWidget( ComboBox* box, - wxWindow *parent, - int iSelection, - std::string title, - std::vector< std::string > lstIn, - int typeForm) - : - wxPanel( parent, -1) , + wxWindow *parent, + int iSelection, + std::string title, + std::vector< std::string > lstIn, + int typeForm, + int sizeX, + int sizeY + ) : + wxPanel( parent, -1,wxDefaultPosition ) , mBox(box), mTypeForm(typeForm) { - wxPanel *panel = this; - wxlistbox = NULL; - wxchoice = NULL; - int i; - - - + mwxspinbutton = NULL; + itemcontainer = NULL; + wxPanel *panel = this; + int i; //--------------------------------------------------------------------- // 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("") ) ); } - sizer->AddGrowableCol(0); - panel->SetSizer(sizer); - - //--------------------------------------------------------------------- - // 1) Creation de wxChoise widget - - if (mTypeForm==1) - { - - wxlistbox = new wxListBox ( panel , -1 ); - Connect( wxlistbox->GetId(), wxEVT_COMMAND_CHOICE_SELECTED, (wxObjectEventFunction) (void (wxPanel::*)(wxEvent&))&ComboBoxWidget::OnComboBox ); - for (i=0;iAppend( bbtk::std2wx( lstIn[i] ) ); - } // for i - wxlistbox->SetSelection(iSelection); - sizer->Add( wxlistbox,1,wxGROW ); - - } else { - - wxchoice = new wxChoice ( panel , -1 ); - Connect( wxchoice->GetId(), wxEVT_COMMAND_CHOICE_SELECTED, (wxObjectEventFunction) (void (wxPanel::*)(wxEvent&))&ComboBoxWidget::OnComboBox ); - for (i=0;iAppend( bbtk::std2wx( lstIn[i] ) ); - } // for i - wxchoice->SetSelection(iSelection); - sizer->Add( wxchoice,1,wxGROW ); - } - - -// panel->SetAutoLayout(true); -// panel->Layout(); + + if (mTypeForm==1) + { + wxListBox *wxlistbox = new wxListBox ( panel , -1 , wxDefaultPosition,wxSize(sizeX,sizeY),0, NULL, wxLB_SINGLE ); + itemcontainer=wxlistbox; + sizer->Add( wxlistbox,1,wxEXPAND ); + Connect( wxlistbox->GetId(), + 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; + sizer->Add( wxchoice,1,wxGROW ); + Connect( wxchoice->GetId(), + wxEVT_COMMAND_CHOICE_SELECTED, (wxObjectEventFunction) (void (wxPanel::*)(wxEvent&))&ComboBoxWidget::OnComboBox ); + } + + if (mBox->bbGetInputWithSpinButton()==true) + { + 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 ); } - //------------------------------------------------------------------------- - + + //------------------------------------------------------------------------- ComboBoxWidget::~ComboBoxWidget() { } //-------------------------------------------------------------------------- - void ComboBoxWidget::OnComboBox(wxEvent& event) + void ComboBoxWidget::VerifyDeselect(int iSelection) { - int iSelection; - if (mTypeForm==1) - { - iSelection = wxlistbox->GetSelection(); - } else { - iSelection = wxchoice->GetSelection(); - } - - mBox->bbSetInputSelection( iSelection ); - mBox->bbSetOutputOut( iSelection ); - mBox->bbSetOutputOutString( bbtk::wx2std( wxchoice->GetString(iSelection) ) ); - mBox->bbSignalOutputModification("Out"); - mBox->bbSignalOutputModification("OutString"); + if ((iSelection>=0) && (mBox->bbGetInputDeselect()==true) ) + { + if (mTypeForm==1) + { + ((wxListBox*)itemcontainer)->Deselect( iSelection ); + } // if mTypeForm + } // if iSelection + } + + //-------------------------------------------------------------------------- + void ComboBoxWidget::OnComboBoxSelection(int iSelection) + { + if (iSelection>=0) + { + mBox->bbSetInputSelection( iSelection ); + mBox->bbSetOutputOut( 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) + { + wxChoice *wxchoise=(wxChoice *)itemcontainer; + wxchoise->SetToolTip( itemcontainer->GetString(iSelection) ); + } // if mTypeForm + + +// mBox->bbSignalOutputModification("Out"); +// mBox->bbSignalOutputModification("OutString"); + } // if iSelection } //-------------------------------------------------------------------------- - void ComboBoxWidget::FillItems( - int iSelection, - std::vector< std::string > lstIn - ) +void ComboBoxWidget::OnComboBox(wxEvent& event) +{ + int iSelection = itemcontainer->GetSelection(); + OnComboBoxSelection( iSelection ); + if (mBox->bbGetInputWithSpinButton()==true) { - int i; - if (mTypeForm==1) + 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,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 (mBox->bbGetInputWithSpinButton()==true) { - wxlistbox->Clear(); - for (i=0;iAppend( bbtk::std2wx( lstIn[i] ) ); - } // for i - wxlistbox->SetSelection(iSelection); - } else { - wxchoice->Clear(); - for (i=0;iAppend( bbtk::std2wx( lstIn[i] ) ); - } // for i - wxchoice->SetSelection(iSelection); - } // if - } + 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) BBTK_BLACK_BOX_IMPLEMENTATION(ComboBox,bbtk::WxBlackBox); + //===== // 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) //===== void ComboBox::Process() { - ComboBoxWidget *w = (ComboBoxWidget*)bbGetOutputWidget(); - w->FillItems( bbGetInputSelection(),bbGetInputIn() ); + int iSelection = bbGetInputSelection(); +// if (bbGetInputSelection() >= bbGetInputIn().size()) { iSelection=bbGetInputIn().size()-1; } + if (bbGetInputSelection() >= bbGetInputIn().size()) { iSelection=0; } + ComboBoxWidget *w = (ComboBoxWidget*)bbGetOutputWidget(); + if (w!=NULL) { + w->FillItems( iSelection, bbGetInputIn() ); + bbSetInputSelection( iSelection ); + bbSetOutputOut( iSelection ); + int size = bbGetInputIn().size(); + if ( (iSelection>=0) && ( iSelectionVerifyDeselect(iSelection); + } // if w } - //===== // 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) //===== void ComboBox::CreateWidget(wxWindow* parent) { - -// bbSetOutputWidget( new wxStaticText ( parent , -1 , _T("") ) ); -// bbSetOutputWidget( new wxComboBox ( parent , -1 , _T("ups") ) ); -// bbSetOutputWidget( new wxChoice ( parent , -1 ) ); - ComboBoxWidget *w = new ComboBoxWidget( this, - parent, + parent, bbGetInputSelection() , bbGetInputTitle(), bbGetInputIn(), - bbGetInputForm() ); - + bbGetInputForm(), + bbGetInputWinWidth(), bbGetInputWinHeight() ); bbSetOutputOut( bbGetInputSelection() ); - bbSetOutputOutString( bbGetInputIn()[ bbGetInputSelection() ] ); + if (bbGetInputIn().size()> bbGetInputSelection() ) + { + bbSetOutputOutString( bbGetInputIn()[ bbGetInputSelection() ] ); + } // if InputIn size bbSetOutputWidget( w ); - - + } //===== // 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) @@ -200,22 +285,24 @@ void ComboBox::bbUserSetDefaultValues() bbSetInputSelection(0); bbSetInputTitle(""); bbSetInputForm(0); + 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) //===== void ComboBox::bbUserInitializeProcessing() { - } //===== // 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) //===== void ComboBox::bbUserFinalizeProcessing() { - -} } -// EO namespace bbwx + +}// EO namespace bbwx