X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/442b35b53bf95f5c6c003ea9ddbefd17adbc2a00..16d865f756b8bc251467139b3b75752219ab97bd:/src/univ/combobox.cpp diff --git a/src/univ/combobox.cpp b/src/univ/combobox.cpp index b90ef9ff70..54ce379716 100644 --- a/src/univ/combobox.cpp +++ b/src/univ/combobox.cpp @@ -76,25 +76,35 @@ public: wxComboButton(wxComboControl *combo) : wxBitmapButton(combo->GetParent(), -1, wxNullBitmap, wxDefaultPosition, wxDefaultSize, - wxBORDER_NONE) + wxBORDER_NONE | wxBU_EXACTFIT) { m_combo = combo; - wxBitmap bmpNormal, bmpPressed, bmpDisabled; + wxBitmap bmpNormal, bmpFocus, bmpPressed, bmpDisabled; + + GetRenderer()->GetComboBitmaps(&bmpNormal, + &bmpFocus, + &bmpPressed, + &bmpDisabled); - GetRenderer()->GetComboBitmaps(&bmpNormal, &bmpPressed, &bmpDisabled); SetBitmapLabel(bmpNormal); - SetBitmapFocus(bmpNormal); - SetBitmapSelected(bmpPressed); - SetBitmapDisabled(bmpDisabled); + SetBitmapFocus(bmpFocus.Ok() ? bmpFocus : bmpNormal); + SetBitmapSelected(bmpPressed.Ok() ? bmpPressed : bmpNormal); + SetBitmapDisabled(bmpDisabled.Ok() ? bmpDisabled : bmpNormal); - SetSize(bmpNormal.GetWidth(), bmpNormal.GetHeight()); + SetBestSize(wxDefaultSize); } protected: void OnButton(wxCommandEvent& event) { m_combo->ShowPopup(); } - virtual wxSize DoGetBestSize() const { return GetSize(); } + virtual wxSize DoGetBestClientSize() const + { + const wxBitmap& bmp = GetBitmapLabel(); + + return wxSize(bmp.GetWidth(), bmp.GetHeight()); + + } private: wxComboControl *m_combo; @@ -201,6 +211,8 @@ void wxComboControl::Init() m_popup = (wxComboPopup *)NULL; m_winPopup = (wxPopupComboWindow *)NULL; m_isPopupShown = FALSE; + m_btn = NULL; + m_text = NULL; } bool wxComboControl::Create(wxWindow *parent, @@ -239,7 +251,8 @@ bool wxComboControl::Create(wxWindow *parent, m_heightPopup = size.y - DoGetBestSize().y; } - DoSetSize(pos.x, pos.y, size.x, size.y); + SetBestSize(size); + Move(pos); // create the popup window immediately here to allow creating the controls // with parent == GetPopupWindow() from the derived class ctor @@ -298,12 +311,12 @@ void wxComboControl::DoMoveWindow(int x, int y, int width, int height) width -= rectBorders.x + rectBorders.width; height -= rectBorders.y + rectBorders.height; - wxSize sizeBtn = m_btn->GetSize(), - sizeText = m_text->GetSize(); + wxSize sizeBtn = m_btn->GetBestSize(); wxCoord wText = width - sizeBtn.x; - m_text->SetSize(x, y, wText, height); - m_btn->SetSize(x + wText, y, -1, height); + wxPoint p = GetParent() ? GetParent()->GetClientAreaOrigin() : wxPoint(0,0); + m_text->SetSize(x - p.x, y - p.y, wText, height); + m_btn->SetSize(x - p.x + wText, y - p.y, sizeBtn.x, height); } // ---------------------------------------------------------------------------- @@ -326,8 +339,11 @@ bool wxComboControl::Show(bool show) if ( !wxControl::Show(show) ) return FALSE; - m_btn->Show(show); - m_text->Show(show); + if (m_btn) + m_btn->Show(show); + + if (m_text) + m_text->Show(show); return TRUE; } @@ -505,7 +521,10 @@ bool wxComboListBox::SetSelection(const wxString& value) void wxComboListBox::OnSelect(wxCommandEvent& event) { - // first let the user code have the event + // first update the combo and close the listbox + m_combo->OnSelect(event.GetString()); + + // next let the user code have the event // all fields are already filled by the listbox, just change the event // type and send it to the combo @@ -514,9 +533,6 @@ void wxComboListBox::OnSelect(wxCommandEvent& event) event2.SetEventObject(m_combo); event2.SetId(m_combo->GetId()); m_combo->ProcessEvent(event2); - - // next update the combo and close the listbox - m_combo->OnSelect(event.GetString()); } void wxComboListBox::OnShow() @@ -760,7 +776,7 @@ wxClientData* wxComboBox::DoGetItemClientObject(int n) const // input handling // ---------------------------------------------------------------------------- -void wxComboControl::OnKey(wxCommandEvent& event) +void wxComboControl::OnKey(wxKeyEvent& event) { if ( m_isPopupShown ) { @@ -815,7 +831,7 @@ wxStdComboBoxInputHandler::wxStdComboBoxInputHandler(wxInputHandler *inphand) { } -bool wxStdComboBoxInputHandler::HandleKey(wxControl *control, +bool wxStdComboBoxInputHandler::HandleKey(wxInputConsumer *consumer, const wxKeyEvent& event, bool pressed) { @@ -835,13 +851,13 @@ bool wxStdComboBoxInputHandler::HandleKey(wxControl *control, if ( !!action ) { - control->PerformAction(action); + consumer->PerformAction(action); return TRUE; } } - return wxStdInputHandler::HandleKey(control, event, pressed); + return wxStdInputHandler::HandleKey(consumer, event, pressed); } #endif // wxUSE_COMBOBOX