]> git.saurik.com Git - wxWidgets.git/commitdiff
Reworked wxSystemColourProperty::StringToValue() to use wxColour::Set() instead of...
authorJaakko Salli <jaakko.salli@dnainternet.net>
Sat, 20 Nov 2010 11:58:54 +0000 (11:58 +0000)
committerJaakko Salli <jaakko.salli@dnainternet.net>
Sat, 20 Nov 2010 11:58:54 +0000 (11:58 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66217 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/propgrid/tests.cpp
src/propgrid/advprops.cpp

index 5d62dbfe81b5e015915f7ecec3b1ee97efc3174e..3eafa29d971afd5ef0c84bf2864d849d0754009d 100644 (file)
@@ -752,6 +752,16 @@ bool FormMain::RunTests( bool fullTest, bool interactive )
             wxLogDebug("Did not match: Car.Convertible=%s", pgman->GetPropertyValueAsString("Car.Convertible").c_str());
             RT_FAILURE();
         }
+
+        // SetPropertyValueString for special cases such as wxColour
+        pgman->SetPropertyValueString("ColourProperty", "(123,4,255)");
+        col << pgman->GetPropertyValue("ColourProperty");
+        if ( col != wxColour(123, 4, 255) )
+            RT_FAILURE();
+        pgman->SetPropertyValueString("ColourProperty", "#FE860B");
+        col << pgman->GetPropertyValue("ColourProperty");
+        if ( col != wxColour(254, 134, 11) )
+            RT_FAILURE();
     }
 
     {
index dafde5ff54cfe05390b2a3f9b26fb2cbdaf3e317..b29d63a48cbcf287ca2b1e468837025fd97920f7 100644 (file)
@@ -1373,37 +1373,28 @@ void wxSystemColourProperty::OnCustomPaint( wxDC& dc, const wxRect& rect,
 
 bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& text, int argFlags ) const
 {
-    //
-    // Accept colour format "[Name] [(R,G,B)]"
-    // Name takes precedence.
-    //
-    wxString colourName;
-    wxString colourRGB;
+    wxString custColName(m_choices.GetLabel(GetCustomColourIndex()));
+    wxString colStr(text);
+    colStr.Trim(true);
+    colStr.Trim(false);
 
-    int ppos = text.Find(wxT("("));
+    wxColour customColour;
+    bool conversionSuccess = false;
 
-    if ( ppos == wxNOT_FOUND )
-    {
-        colourName = text;
-    }
-    else
+    if ( colStr != custColName )
     {
-        colourName = text.substr(0, ppos);
-        colourRGB = text.substr(ppos, text.length()-ppos);
-    }
-
-    // Strip spaces from extremities
-    colourName.Trim(true);
-    colourName.Trim(false);
-    colourRGB.Trim(true);
+        // Convert (R,G,B) to rgb(R,G,B)
+        if ( colStr.Find(wxS("(")) == 0 )
+        {
+            colStr = wxS("rgb") + colStr;
+        }
 
-    // Validate colourRGB string - (1,1,1) is shortest allowed
-    if ( colourRGB.length() < 7 )
-        colourRGB.clear();
+        conversionSuccess = customColour.Set(colStr);
+    }
 
-    if ( colourRGB.length() == 0 && m_choices.GetCount() &&
+    if ( !conversionSuccess && m_choices.GetCount() &&
          !(m_flags & wxPG_PROP_HIDE_CUSTOM_COLOUR) &&
-         colourName == m_choices.GetLabel(GetCustomColourIndex()) )
+         colStr == custColName )
     {
         if ( !(argFlags & wxPG_EDITABLE_VALUE ))
         {
@@ -1421,10 +1412,12 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te
 
         bool done = false;
 
-        if ( colourName.length() )
+        if ( !conversionSuccess )
         {
             // Try predefined colour first
-            bool res = wxEnumProperty::StringToValue(value, colourName, argFlags);
+            bool res = wxEnumProperty::StringToValue(value,
+                                                     colStr,
+                                                     argFlags);
             if ( res && GetIndex() >= 0 )
             {
                 val.m_type = GetIndex();
@@ -1437,22 +1430,11 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te
                 done = true;
             }
         }
-        if ( colourRGB.length() && !done )
+        else
         {
-            // Then check custom colour.
             val.m_type = wxPG_COLOUR_CUSTOM;
-
-            int r = -1, g = -1, b = -1;
-            wxSscanf(colourRGB.c_str(),wxT("(%i,%i,%i)"),&r,&g,&b);
-
-            if ( r >= 0 && r <= 255 &&
-                 g >= 0 && g <= 255 &&
-                 b >= 0 && b <= 255 )
-            {
-                val.m_colour.Set(r,g,b);
-
-                done = true;
-            }
+            val.m_colour = customColour;
+            done = true;
         }
 
         if ( !done )