const wxBitmap& GetBitmapHover() const { return m_bmpHover; }
const wxBitmap& GetBitmapDisabled() const { return m_bmpDisabled; }
+ // Hint functions mirrored from TextEntryBase
+ virtual bool SetHint(const wxString& hint);
+ virtual wxString GetHint() const;
+
// Margins functions mirrored from TextEntryBase
// (wxComboCtrl does not inherit from wxTextEntry, but may embed a
// wxTextCtrl, so we need these). Also note that these functions
protected:
+ // Returns true if hint text should be drawn in the control
+ bool ShouldUseHintText(int flags = 0) const
+ {
+ return ( !m_text &&
+ !(flags & wxCONTROL_ISSUBMENU) &&
+ !m_valueString.length() &&
+ m_hintText.length() &&
+ !ShouldDrawFocus() );
+ }
+
//
// Override these for customization purposes
//
// This is used when m_text is hidden (readonly).
wxString m_valueString;
+ // This is used when control is unfocused and m_valueString is empty
+ wxString m_hintText;
+
// the text control and button we show all the time
wxTextCtrl* m_text;
wxWindow* m_btn;
*/
static int GetFeatures();
+ /**
+ Returns the current hint string.
+
+ See SetHint() for more information about hints.
+
+ @since 2.9.1
+ */
+ virtual wxString GetHint() const;
+
/**
Returns the insertion point for the combo control's text field.
*/
void SetCustomPaintWidth(int width);
+ /**
+ Sets a hint shown in an empty unfocused combo control.
+
+ Notice that hints are known as <em>cue banners</em> under MSW or
+ <em>placeholder strings</em> under OS X.
+
+ @see wxTextEntry::SetHint()
+
+ @since 2.9.1
+ */
+ virtual void SetHint(const wxString& hint);
+
/**
Sets the insertion point in the text field.
m_text->Create(this, wxID_ANY, m_valueString,
wxDefaultPosition, wxSize(10,-1),
style, validator);
+ m_text->SetHint(m_hintText);
}
}
m_text->Undo();
}
+bool wxComboCtrlBase::SetHint(const wxString& hint)
+{
+ m_hintText = hint;
+ bool res = true;
+ if ( m_text )
+ res = m_text->SetHint(hint);
+ Refresh();
+ return res;
+}
+
+wxString wxComboCtrlBase::GetHint() const
+{
+ return m_hintText;
+}
+
#endif // wxUSE_COMBOCTRL
{
if ( flags & wxODCB_PAINTING_CONTROL )
{
- dc.DrawText( GetValue(),
+ wxString text;
+
+ if ( !ShouldUseHintText() )
+ {
+ text = GetValue();
+ }
+ else
+ {
+ text = GetHint();
+ wxColour col = wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT);
+ dc.SetTextForeground(col);
+ }
+
+ dc.DrawText( text,
rect.x + GetMargins().x,
(rect.height-dc.GetCharHeight())/2 + rect.y );
}