X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3c3b35589a13813433617be9d212fdc768246938..b53aea81d2e102224b452ef5bf7aee1132f37c6f:/src/common/pickerbase.cpp diff --git a/src/common/pickerbase.cpp b/src/common/pickerbase.cpp index d18dbb0a33..cccaabc42e 100644 --- a/src/common/pickerbase.cpp +++ b/src/common/pickerbase.cpp @@ -30,11 +30,13 @@ wxUSE_FONTPICKERCTRL #include "wx/pickerbase.h" +#include "wx/tooltip.h" #ifndef WX_PRECOMP #include "wx/textctrl.h" #endif + // ============================================================================ // implementation // ============================================================================ @@ -45,7 +47,7 @@ BEGIN_EVENT_TABLE(wxPickerBase, wxControl) EVT_SIZE(wxPickerBase::OnSize) WX_EVENT_TABLE_CONTROL_CONTAINER(wxPickerBase) END_EVENT_TABLE() -WX_DELEGATE_TO_CONTROL_CONTAINER(wxPickerBase) +WX_DELEGATE_TO_CONTROL_CONTAINER(wxPickerBase, wxControl) // ---------------------------------------------------------------------------- @@ -75,8 +77,9 @@ bool wxPickerBase::CreateBase(wxWindow *parent, // NOTE: the style of this class (wxPickerBase) and the style of the // attached text control are different: GetTextCtrlStyle() extracts // the styles related to the textctrl from the styles passed here - m_text = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, - wxDefaultSize, GetTextCtrlStyle(style)); + m_text = new wxTextCtrl(this, wxID_ANY, wxEmptyString, + wxDefaultPosition, wxDefaultSize, + GetTextCtrlStyle(style)); if (!m_text) { wxFAIL_MSG( wxT("wxPickerBase's textctrl creation failed") ); @@ -93,17 +96,18 @@ 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); + // the text control's proportion values defaults to 2 m_sizer->Add(m_text, 2, GetDefaultTextCtrlFlag(), 5); } @@ -112,19 +116,40 @@ bool wxPickerBase::CreateBase(wxWindow *parent, void wxPickerBase::PostCreation() { - // the picker's proportion value is fixed - m_sizer->Add(m_picker, 1, GetDefaultPickerCtrlFlag(), 5); + // the picker's proportion value defaults to 1 when there's no text control + // associated with it - in that case it defaults to 0 + m_sizer->Add(m_picker, HasTextCtrl() ? 0 : 1, GetDefaultPickerCtrlFlag(), 5); SetSizer(m_sizer); - m_sizer->SetSizeHints(this); + SetMinSize( m_sizer->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(); }