X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/73545b12904a96640bfa101e6b06a57ef6f54d16..bf2d9237de0ee4a915a3c03681a913da9255b959:/samples/widgets/bmpcombobox.cpp diff --git a/samples/widgets/bmpcombobox.cpp b/samples/widgets/bmpcombobox.cpp index fc8a64fa3c..61ef1dac46 100644 --- a/samples/widgets/bmpcombobox.cpp +++ b/samples/widgets/bmpcombobox.cpp @@ -87,6 +87,13 @@ enum BitmapComboBoxPage_ContainerTests }; +// kinds of comboboxes +enum +{ + ComboKind_Default, + ComboKind_Simple, + ComboKind_DropDown +}; // ---------------------------------------------------------------------------- // BitmapComboBoxWidgetsPage @@ -161,6 +168,9 @@ protected: // the controls // ------------ + // the sel mode radiobox + wxRadioBox *m_radioKind; + // the checkboxes for styles wxCheckBox *m_chkSort, *m_chkReadonly; @@ -227,10 +237,14 @@ END_EVENT_TABLE() // implementation // ============================================================================ - +#if defined(__WXMSW__) || defined(__WXGTK__) + #define NATIVE_OR_GENERIC_CTRLS NATIVE_CTRLS +#else + #define NATIVE_OR_GENERIC_CTRLS GENERIC_CTRLS +#endif IMPLEMENT_WIDGETS_PAGE(BitmapComboBoxWidgetsPage, _T("BitmapCombobox"), - GENERIC_CTRLS | WITH_ITEMS_CTRLS | COMBO_CTRLS + NATIVE_OR_GENERIC_CTRLS | WITH_ITEMS_CTRLS | COMBO_CTRLS ); @@ -287,6 +301,20 @@ void BitmapComboBoxWidgetsPage::CreateContent() // left pane - style box wxStaticBox *box = new wxStaticBox(this, wxID_ANY, _T("&Set style")); + + // should be in sync with ComboKind_XXX values + static const wxString kinds[] = + { + _T("default"), + _T("simple"), + _T("drop down"), + }; + + m_radioKind = new wxRadioBox(this, wxID_ANY, _T("Combobox &kind:"), + wxDefaultPosition, wxDefaultSize, + WXSIZEOF(kinds), kinds, + 1, wxRA_SPECIFY_COLS); + wxSizer *sizerStyle = new wxStaticBoxSizer(box, wxVERTICAL); m_chkSort = CreateCheckBoxAndAddToSizer(sizerStyle, _T("&Sort items")); @@ -296,6 +324,7 @@ void BitmapComboBoxWidgetsPage::CreateContent() sizerStyle->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 3); sizerLeft->Add(sizerStyle, 0, wxGROW | wxALIGN_CENTRE_HORIZONTAL); + sizerLeft->Add(m_radioKind, 0, wxGROW | wxALL, 5); // left pane - other options box box = new wxStaticBox(this, wxID_ANY, _T("Demo options")); @@ -401,6 +430,24 @@ void BitmapComboBoxWidgetsPage::CreateCombo() if ( m_chkReadonly->GetValue() ) flags |= wxCB_READONLY; + switch ( m_radioKind->GetSelection() ) + { + default: + wxFAIL_MSG( _T("unknown combo kind") ); + // fall through + + case ComboKind_Default: + break; + + case ComboKind_Simple: + flags |= wxCB_SIMPLE; + break; + + case ComboKind_DropDown: + flags = wxCB_DROPDOWN; + break; + } + wxArrayString items; wxArrayPtrVoid bitmaps; if ( m_combobox ) @@ -531,12 +578,16 @@ void BitmapComboBoxWidgetsPage::OnButtonLoadFromFile(wxCommandEvent& WXUNUSED(ev if ( sel == wxNOT_FOUND ) sel = m_combobox->GetCount(); - m_combobox->Insert(s, QueryBitmap(&s), sel); + wxBitmap bmp = QueryBitmap(&s); + if (bmp.IsOk()) + m_combobox->Insert(s, bmp, sel); } void BitmapComboBoxWidgetsPage::OnButtonSetFromFile(wxCommandEvent& WXUNUSED(event)) { - m_combobox->SetItemBitmap(m_combobox->GetSelection(), QueryBitmap(NULL)); + wxBitmap bmp = QueryBitmap(NULL); + if (bmp.IsOk()) + m_combobox->SetItemBitmap(m_combobox->GetSelection(), bmp); } void BitmapComboBoxWidgetsPage::OnButtonAddMany(wxCommandEvent& WXUNUSED(event)) @@ -614,6 +665,7 @@ void BitmapComboBoxWidgetsPage::LoadWidgetImages( wxArrayString* strings, wxImag if ( !wxDir::Exists(fn.GetFullPath()) || !wxDir::GetAllFiles(fn.GetFullPath(),strings,wxT("*.xpm")) ) { + // Try ../../samples/widgets/icons fn.RemoveLastDir(); fn.RemoveLastDir(); fn.AppendDir(wxT("icons")); @@ -646,7 +698,7 @@ void BitmapComboBoxWidgetsPage::LoadWidgetImages( wxArrayString* strings, wxImag for ( i=0; isize(); i++ ) { fn.SetFullName((*strings)[i]); - wxString name =fn.GetName(); + wxString name = fn.GetName(); // Handle few exceptions if ( name == wxT("bmpbtn") ) @@ -668,6 +720,11 @@ void BitmapComboBoxWidgetsPage::LoadWidgetImages( wxArrayString* strings, wxImag #endif images->Add(bmp); (*strings)[i] = name; + + // if the combobox is empty, use as bitmap size of the image list + // the size of the first valid image loaded + if (foundSize == wxDefaultSize) + foundSize = bmp.GetSize(); } } @@ -847,7 +904,8 @@ wxBitmap BitmapComboBoxWidgetsPage::QueryBitmap(wxString* pStr) bitmap = LoadBitmap(filepath); } - wxLogDebug(wxT("%i, %i"),bitmap.GetWidth(), bitmap.GetHeight()); + if (bitmap.IsOk()) + wxLogDebug(wxT("%i, %i"),bitmap.GetWidth(), bitmap.GetHeight()); ::wxSetCursor( *wxSTANDARD_CURSOR );