fixed setting colour of wxStaticText in case the label contains XML special characters

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28041 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík 2004-06-27 13:42:17 +00:00
parent 1dbeee5774
commit 66bd83b4ec
6 changed files with 100 additions and 14 deletions

View File

@ -131,5 +131,10 @@ inline wxEventType GtkScrollWinTypeToWx(guint scrollType)
wxEVT_SCROLLWIN_TOP - wxEVT_SCROLL_TOP;
}
#ifdef __WXGTK20__
// Escapes string so that it is valid Pango markup XML string:
wxString wxEscapeStringForPangoMarkup(const wxString& str);
#endif
#endif // _WX_GTK_PRIVATE_H_

View File

@ -131,5 +131,10 @@ inline wxEventType GtkScrollWinTypeToWx(guint scrollType)
wxEVT_SCROLLWIN_TOP - wxEVT_SCROLL_TOP;
}
#ifdef __WXGTK20__
// Escapes string so that it is valid Pango markup XML string:
wxString wxEscapeStringForPangoMarkup(const wxString& str);
#endif
#endif // _WX_GTK_PRIVATE_H_

View File

@ -132,19 +132,20 @@ void wxStaticText::SetLabel( const wxString &label )
#ifdef __WXGTK20__
// Build the colorized version of the label (markup only allowed
// under GTK2):
wxString colorlabel = label;
// If the color has been set, create a markup string to pass to
// the label setter
if (m_foregroundColour.Ok())
{
// If the color has been set, create a markup string to pass to
// the label setter
wxString colorlabel;
colorlabel.Printf(_T("<span foreground=\"#%02x%02x%02x\">%s</span>"),
m_foregroundColour.Red(), m_foregroundColour.Green(),
m_foregroundColour.Blue(), label.c_str());
m_foregroundColour.Blue(),
wxEscapeStringForPangoMarkup(label).c_str());
gtk_label_set_markup( GTK_LABEL(m_widget), wxGTK_CONV( colorlabel ) );
}
gtk_label_set_markup( GTK_LABEL(m_widget), wxGTK_CONV( colorlabel ) );
else
#else
gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
#endif
// adjust the label size to the new label unless disabled

View File

@ -81,6 +81,43 @@ bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) )
}
#endif
#ifdef __WXGTK20__
// Escapes string so that it is valid Pango markup XML string:
wxString wxEscapeStringForPangoMarkup(const wxString& str)
{
size_t len = str.length();
wxString out;
out.Alloc(len);
for (size_t i = 0; i < len; i++)
{
wxChar c = str[i];
switch (c)
{
case _T('&'):
out << _T("&amp;");
break;
case _T('<'):
out << _T("&lt;");
break;
case _T('>'):
out << _T("&gt;");
break;
case _T('\''):
out << _T("&apos;");
break;
case _T('"'):
out << _T("&quot;");
break;
default:
out << c;
break;
}
}
return out;
}
#endif
// ----------------------------------------------------------------------------
// display characterstics
// ----------------------------------------------------------------------------

View File

@ -132,19 +132,20 @@ void wxStaticText::SetLabel( const wxString &label )
#ifdef __WXGTK20__
// Build the colorized version of the label (markup only allowed
// under GTK2):
wxString colorlabel = label;
// If the color has been set, create a markup string to pass to
// the label setter
if (m_foregroundColour.Ok())
{
// If the color has been set, create a markup string to pass to
// the label setter
wxString colorlabel;
colorlabel.Printf(_T("<span foreground=\"#%02x%02x%02x\">%s</span>"),
m_foregroundColour.Red(), m_foregroundColour.Green(),
m_foregroundColour.Blue(), label.c_str());
m_foregroundColour.Blue(),
wxEscapeStringForPangoMarkup(label).c_str());
gtk_label_set_markup( GTK_LABEL(m_widget), wxGTK_CONV( colorlabel ) );
}
gtk_label_set_markup( GTK_LABEL(m_widget), wxGTK_CONV( colorlabel ) );
else
#else
gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
#endif
// adjust the label size to the new label unless disabled

View File

@ -81,6 +81,43 @@ bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) )
}
#endif
#ifdef __WXGTK20__
// Escapes string so that it is valid Pango markup XML string:
wxString wxEscapeStringForPangoMarkup(const wxString& str)
{
size_t len = str.length();
wxString out;
out.Alloc(len);
for (size_t i = 0; i < len; i++)
{
wxChar c = str[i];
switch (c)
{
case _T('&'):
out << _T("&amp;");
break;
case _T('<'):
out << _T("&lt;");
break;
case _T('>'):
out << _T("&gt;");
break;
case _T('\''):
out << _T("&apos;");
break;
case _T('"'):
out << _T("&quot;");
break;
default:
out << c;
break;
}
}
return out;
}
#endif
// ----------------------------------------------------------------------------
// display characterstics
// ----------------------------------------------------------------------------