Replace wxST_MARKUP style with wxControl::SetLabelMarkup().

This is an incompatible change which removes the wxStaticText-specific
wxST_MARKUP style and adds wxControl::SetLabelMarkup() replacing it.

It doesn't actually change anything yet but it simplifies wxStaticText code a
lot by getting rid of many markup-related functions in it which had to behave
differently depending on whether wxST_MARKUP was used or not and also paves
way for adding markup support for the other controls in the future.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67055 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2011-02-27 12:47:26 +00:00
parent 6ea2bc50c8
commit 3da9cffc79
17 changed files with 290 additions and 343 deletions

View File

@@ -101,32 +101,24 @@ bool wxStaticText::Create(wxWindow *parent,
return true;
}
void wxStaticText::SetLabel( const wxString& str )
void wxStaticText::GTKDoSetLabel(GTKLabelSetter setter, const wxString& label)
{
wxCHECK_RET( m_widget != NULL, wxT("invalid static text") );
// save the label inside m_labelOrig in case user calls GetLabel() later
m_labelOrig = str;
InvalidateBestSize();
wxString label(str);
if (gtk_check_version(2,6,0) &&
IsEllipsized())
if (gtk_check_version(2,6,0) && IsEllipsized())
{
// GTK+ < 2.6 does not support ellipsization:
// since we need to use our generic code for ellipsization (which does not
// behaves well in conjunction with markup; i.e. it may break the markup
// validity erasing portions of the string), we also need to strip out
// the markup (if present) from the label.
label = GetEllipsizedLabelWithoutMarkup();
// GTK+ < 2.6 does not support ellipsization so we need to do it
// manually and as our ellipsization code doesn't deal with markup, we
// have no choice but to ignore it in this case and always use plain
// text.
GTKSetLabelForLabel(GTK_LABEL(m_widget), GetEllipsizedLabel());
}
else // Ellipsization not needed or supported by GTK+.
{
(this->*setter)(GTK_LABEL(m_widget), label);
}
if ( HasFlag(wxST_MARKUP) )
GTKSetLabelWithMarkupForLabel(GTK_LABEL(m_widget), label);
else
GTKSetLabelForLabel(GTK_LABEL(m_widget), label);
// adjust the label size to the new label unless disabled
if ( !HasFlag(wxST_NO_AUTORESIZE) &&
@@ -134,6 +126,26 @@ void wxStaticText::SetLabel( const wxString& str )
SetSize( GetBestSize() );
}
void wxStaticText::SetLabel(const wxString& label)
{
m_labelOrig = label;
GTKDoSetLabel(&wxStaticText::GTKSetLabelForLabel, label);
}
bool wxStaticText::DoSetLabelMarkup(const wxString& markup)
{
const wxString stripped = RemoveMarkup(markup);
if ( stripped.empty() && !markup.empty() )
return false;
m_labelOrig = stripped;
GTKDoSetLabel(&wxStaticText::GTKSetLabelWithMarkupForLabel, markup);
return true;
}
bool wxStaticText::SetFont( const wxFont &font )
{
const bool wasUnderlined = GetFont().GetUnderlined();
@@ -228,11 +240,7 @@ wxString wxStaticText::DoGetLabel() const
void wxStaticText::DoSetLabel(const wxString& str)
{
// this function looks like GTKSetLabelForLabel() but here we just want to modify
// the GTK control without altering any internal wxStaticText variable
const wxString labelGTK = GTKConvertMnemonics(str);
gtk_label_set_text_with_mnemonic(GTK_LABEL(m_widget), wxGTK_CONV(labelGTK));
GTKSetLabelForLabel(GTK_LABEL(m_widget), str);
}
// static