X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/39bc12ff4b0670692750055cd7004480fd7b84ee..f239a20092359e3c914adb79bd39f3f5d2b2e06f:/src/common/pickerbase.cpp diff --git a/src/common/pickerbase.cpp b/src/common/pickerbase.cpp index f025426193..797c946876 100644 --- a/src/common/pickerbase.cpp +++ b/src/common/pickerbase.cpp @@ -30,24 +30,19 @@ wxUSE_FONTPICKERCTRL #include "wx/pickerbase.h" +#include "wx/tooltip.h" #ifndef WX_PRECOMP #include "wx/textctrl.h" #endif + // ============================================================================ // implementation // ============================================================================ IMPLEMENT_ABSTRACT_CLASS(wxPickerBase, wxControl) -BEGIN_EVENT_TABLE(wxPickerBase, wxControl) - EVT_SIZE(wxPickerBase::OnSize) - WX_EVENT_TABLE_CONTROL_CONTAINER(wxPickerBase) -END_EVENT_TABLE() -WX_DELEGATE_TO_CONTROL_CONTAINER(wxPickerBase, wxControl) - - // ---------------------------------------------------------------------------- // wxPickerBase // ---------------------------------------------------------------------------- @@ -64,10 +59,13 @@ bool wxPickerBase::CreateBase(wxWindow *parent, // remove any border style from our style as wxPickerBase's window must be // invisible (user styles must be set on the textctrl or the platform-dependent picker) style &= ~wxBORDER_MASK; + if (!wxControl::Create(parent, id, pos, size, style | wxNO_BORDER | wxTAB_TRAVERSAL, validator, name)) return false; + SetMinSize( size ); + m_sizer = new wxBoxSizer(wxHORIZONTAL); if (HasFlag(wxPB_USE_TEXTCTRL)) @@ -94,14 +92,14 @@ bool wxPickerBase::CreateBase(wxWindow *parent, // set the initial contents of the textctrl m_text->SetValue(text); - m_text->Connect(wxEVT_COMMAND_TEXT_UPDATED, + m_text->Connect(m_text->GetId(), wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(wxPickerBase::OnTextCtrlUpdate), NULL, this); - m_text->Connect(wxEVT_KILL_FOCUS, + m_text->Connect(m_text->GetId(), wxEVT_KILL_FOCUS, wxFocusEventHandler(wxPickerBase::OnTextCtrlKillFocus), NULL, this); - m_text->Connect(wxEVT_DESTROY, + m_text->Connect(m_text->GetId(), wxEVT_DESTROY, wxWindowDestroyEventHandler(wxPickerBase::OnTextCtrlDelete), NULL, this); @@ -118,16 +116,47 @@ void wxPickerBase::PostCreation() // associated with it - in that case it defaults to 0 m_sizer->Add(m_picker, HasTextCtrl() ? 0 : 1, GetDefaultPickerCtrlFlag(), 5); + // For aesthetic reasons, make sure the picker is at least as high as the + // associated text control and is always at least square. + const wxSize pickerBestSize(m_picker->GetBestSize()); + const wxSize textBestSize( HasTextCtrl() ? m_text->GetBestSize() : wxSize()); + wxSize pickerMinSize; + pickerMinSize.y = wxMax(pickerBestSize.y, textBestSize.y); + pickerMinSize.x = wxMax(pickerBestSize.x, pickerMinSize.y); + if ( pickerMinSize != pickerBestSize ) + m_picker->SetMinSize(pickerMinSize); + SetSizer(m_sizer); - SetMinSize( m_sizer->GetMinSize() ); + + SetInitialSize( GetMinSize() ); +} + +#if wxUSE_TOOLTIPS + +void wxPickerBase::DoSetToolTip(wxToolTip *tip) +{ + // don't set the tooltip on us but rather on our two child windows + // as otherwise it would appear only when the cursor is placed on the + // small area around the child windows which belong to wxPickerBase + m_picker->SetToolTip(tip); + + // do a copy as wxWindow will own the pointer we pass + if ( m_text ) + m_text->SetToolTip(tip ? new wxToolTip(tip->GetTip()) : NULL); } -void wxPickerBase::OnTextCtrlKillFocus(wxFocusEvent &) +#endif // wxUSE_TOOLTIPS + +// ---------------------------------------------------------------------------- +// wxPickerBase - event handlers +// ---------------------------------------------------------------------------- + +void wxPickerBase::OnTextCtrlKillFocus(wxFocusEvent& event) { - wxASSERT(m_text); + event.Skip(); // don't leave the textctrl empty - if (m_text->GetValue().empty()) + if (m_text && m_text->GetValue().empty()) UpdateTextCtrlFromPicker(); } @@ -143,11 +172,4 @@ void wxPickerBase::OnTextCtrlUpdate(wxCommandEvent &) UpdatePickerFromTextCtrl(); } -void wxPickerBase::OnSize(wxSizeEvent &event) -{ - if (GetAutoLayout()) - Layout(); - event.Skip(); -} - #endif // Any picker in use