//===== // 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) //===== #include "bbwxComboBox.h" #include "bbwxPackage.h" #include #include #include #include #include #include namespace bbwx { //-------------------------------------------------------------------------- // The widget created by the box class ComboBoxWidget : public wxPanel { public: ComboBoxWidget( ComboBox* box, wxWindow *parent, 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; ComboBox *mBox; wxItemContainer *itemcontainer; wxSpinButton *mwxspinbutton; }; //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------- ComboBoxWidget::ComboBoxWidget( ComboBox* box, 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) { mwxspinbutton = NULL; itemcontainer = NULL; wxPanel *panel = this; int i; //--------------------------------------------------------------------- // 2) Insertion of the components in the window // We use a FlexGridSizer // 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) { 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::VerifyDeselect(int iSelection) { 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::OnComboBox(wxEvent& event) { 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,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) { 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() { int iSelection = bbGetInputSelection(); printf("ComboBox::Process A iSelection=%d\n", iSelection); // 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); } //===== // 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) { ComboBoxWidget *w = new ComboBoxWidget( this, parent, bbGetInputSelection() , bbGetInputTitle(), bbGetInputIn(), bbGetInputForm(), bbGetInputWinWidth(), bbGetInputWinHeight() ); bbSetOutputOut( 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) //===== 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