m_search->GetEventHandler()->ProcessEvent(event);
}
+#ifdef __WXMSW__
+ // We increase the text control height to be the same as for the controls
+ // with border as this is what we actually need here because even though
+ // this control itself is borderless, it's inside wxSearchCtrl which does
+ // have the border and so should have the same height as the normal text
+ // entries with border.
+ //
+ // This is a bit ugly and it would arguably be better to use whatever size
+ // the base class version returns and just centre the text vertically in
+ // the search control but I failed to modify the code in LayoutControls()
+ // to do this easily and as there is much in that code I don't understand
+ // (notably what is the logic for buttons sizing?) I prefer to not touch it
+ // at all.
+ virtual wxSize DoGetBestSize() const
+ {
+ const long flags = GetWindowStyleFlag();
+ wxSearchTextCtrl* const self = const_cast<wxSearchTextCtrl*>(this);
+
+ self->SetWindowStyleFlag((flags & ~wxBORDER_MASK) | wxBORDER_DEFAULT);
+ const wxSize size = wxTextCtrl::DoGetBestSize();
+ self->SetWindowStyleFlag(flags);
+
+ return size;
+ }
+#endif // __WXMSW__
+
private:
wxSearchCtrl* m_search;
void SetBitmapLabel(const wxBitmap& label) { m_bmp = label; }
+ // The buttons in wxSearchCtrl shouldn't accept focus from keyboard because
+ // this would interfere with the usual TAB processing: the user expects
+ // that pressing TAB in the search control should switch focus to the next
+ // control and not give it to the button inside the same control. Besides,
+ // the search button can be already activated by pressing "Enter" so there
+ // is really no reason for it to be able to get focus from keyboard.
+ virtual bool AcceptsFocusFromKeyboard() const { return false; }
protected:
wxSize DoGetBestSize() const
m_cancelBitmap);
SetForegroundColour( m_text->GetForegroundColour() );
- m_searchButton->SetForegroundColour( m_text->GetForegroundColour() );
- m_cancelButton->SetForegroundColour( m_text->GetForegroundColour() );
-
SetBackgroundColour( m_text->GetBackgroundColour() );
- m_searchButton->SetBackgroundColour( m_text->GetBackgroundColour() );
- m_cancelButton->SetBackgroundColour( m_text->GetBackgroundColour() );
RecalcBitmaps();
y + ICON_OFFSET - 1, sizeCancel.x, height);
}
+wxWindowList wxSearchCtrl::GetCompositeWindowParts() const
+{
+ wxWindowList parts;
+ parts.push_back(m_text);
+ parts.push_back(m_searchButton);
+ parts.push_back(m_cancelButton);
+ return parts;
+}
// accessors
// ---------
bool wxSearchCtrl::SetFont(const wxFont& font)
{
- bool result = wxSearchCtrlBase::SetFont(font);
- if ( result && m_text )
- {
- result = m_text->SetFont(font);
- }
+ if ( !wxSearchCtrlBase::SetFont(font) )
+ return false;
+
+ // Recreate the bitmaps as their size may have changed.
RecalcBitmaps();
- return result;
+
+ return true;
+}
+
+bool wxSearchCtrl::SetBackgroundColour(const wxColour& colour)
+{
+ if ( !wxSearchCtrlBase::SetBackgroundColour(colour) )
+ return false;
+
+ // When the background changes, re-render the bitmaps so that the correct
+ // colour shows in their "transparent" area.
+ RecalcBitmaps();
+
+ return true;
}
// search control generic only