Reworked wxSystemColourProperty::StringToValue() to use wxColour::Set() instead of doing string-to-colour conversion by itself. This adds support for HTML-colours, among other things (closes #12696).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66217 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2010-11-20 11:58:54 +00:00
parent a90e69f70f
commit 780cccd730
2 changed files with 33 additions and 41 deletions

View 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();
}
{

View 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 )
if ( colStr != custColName )
{
colourName = text;
}
else
{
colourName = text.substr(0, ppos);
colourRGB = text.substr(ppos, text.length()-ppos);
// Convert (R,G,B) to rgb(R,G,B)
if ( colStr.Find(wxS("(")) == 0 )
{
colStr = wxS("rgb") + colStr;
}
conversionSuccess = customColour.Set(colStr);
}
// Strip spaces from extremities
colourName.Trim(true);
colourName.Trim(false);
colourRGB.Trim(true);
// Validate colourRGB string - (1,1,1) is shortest allowed
if ( colourRGB.length() < 7 )
colourRGB.clear();
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 )