]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed setting colour of wxStaticText in case the label contains XML special characters
authorVáclav Slavík <vslavik@fastmail.fm>
Sun, 27 Jun 2004 13:42:17 +0000 (13:42 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sun, 27 Jun 2004 13:42:17 +0000 (13:42 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28041 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/private.h
include/wx/gtk1/private.h
src/gtk/stattext.cpp
src/gtk/utilsgtk.cpp
src/gtk1/stattext.cpp
src/gtk1/utilsgtk.cpp

index 85750269b51ff43d70515d7ced160af967d9b20c..9f4cd54c02a2a3a106cbdb9751001887b3fdb81b 100644 (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_
 
index 85750269b51ff43d70515d7ced160af967d9b20c..9f4cd54c02a2a3a106cbdb9751001887b3fdb81b 100644 (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_
 
index c245fd315c96c06415602ad9195a9dd8d63754fc..6f068dc3d0d4d2fe68b9aec7bff05d0be28543b0 100644 (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
index cef8dbe54e4c67a2000bf062b6a8dee8cd199b1a..e76e3187f3a7eaa9abbad1e279097c06f6a2db73 100644 (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
 // ----------------------------------------------------------------------------
index c245fd315c96c06415602ad9195a9dd8d63754fc..6f068dc3d0d4d2fe68b9aec7bff05d0be28543b0 100644 (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
index cef8dbe54e4c67a2000bf062b6a8dee8cd199b1a..e76e3187f3a7eaa9abbad1e279097c06f6a2db73 100644 (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
 // ----------------------------------------------------------------------------