X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/48aa18c000b0133853d5bb2fa9a23b196d7ce6cd..c698eae5a875ca973df44add1ad67ec69a5754ba:/src/univ/combobox.cpp?ds=sidebyside diff --git a/src/univ/combobox.cpp b/src/univ/combobox.cpp index 256853fbcc..4c122a1904 100644 --- a/src/univ/combobox.cpp +++ b/src/univ/combobox.cpp @@ -41,6 +41,7 @@ #include "wx/validate.h" #endif +#include "wx/tooltip.h" #include "wx/popupwin.h" #include "wx/univ/renderer.h" @@ -124,6 +125,7 @@ public: virtual bool SetSelection(const wxString& value); virtual wxControl *GetControl() { return this; } virtual void OnShow(); + virtual wxCoord GetBestWidth() const; protected: // we shouldn't return height too big from here @@ -299,8 +301,15 @@ wxSize wxComboControl::DoGetBestClientSize() const { wxSize sizeBtn = m_btn->GetBestSize(), sizeText = m_text->GetBestSize(); + wxCoord widthPopup = 0; - return wxSize(sizeText.x + g_comboMargin + sizeBtn.x, wxMax(sizeBtn.y, sizeText.y)); + if (m_popup) + { + widthPopup = m_popup->GetBestWidth(); + } + + return wxSize(wxMax(sizeText.x + g_comboMargin + sizeBtn.x, widthPopup), + wxMax(sizeBtn.y, sizeText.y)); } void wxComboControl::DoMoveWindow(int x, int y, int width, int height) @@ -351,6 +360,29 @@ bool wxComboControl::Show(bool show) return TRUE; } +#if wxUSE_TOOLTIPS +void wxComboControl::DoSetToolTip(wxToolTip *tooltip) +{ + wxControl::DoSetToolTip(tooltip); + + // Set tool tip for button and text box + if (m_text && m_btn) + { + if (tooltip) + { + const wxString &tip = tooltip->GetTip(); + m_text->SetToolTip(tip); + m_btn->SetToolTip(tip); + } + else + { + m_text->SetToolTip(NULL); + m_btn->SetToolTip(NULL); + } + } +} +#endif // wxUSE_TOOLTIPS + // ---------------------------------------------------------------------------- // popup window handling // ---------------------------------------------------------------------------- @@ -591,6 +623,12 @@ void wxComboListBox::OnMouseMove(wxMouseEvent& event) } } +wxCoord wxComboListBox::GetBestWidth() const +{ + wxSize size = wxListBox::GetBestSize(); + return size.x; +} + wxSize wxComboListBox::DoGetBestClientSize() const { // don't return size too big or we risk to not fit on the screen @@ -787,6 +825,18 @@ int wxComboBox::DoAppend(const wxString& item) return GetLBox()->Append(item); } +int wxComboBox::DoInsert(const wxString& item, int pos) +{ + wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list")); + wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index")); + + if (pos == GetCount()) + return DoAppend(item); + + GetLBox()->Insert(item, pos); + return pos; +} + void wxComboBox::DoSetItemClientData(int n, void* clientData) { GetLBox()->SetClientData(n, clientData);