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:
@@ -752,6 +752,16 @@ bool FormMain::RunTests( bool fullTest, bool interactive )
|
|||||||
wxLogDebug("Did not match: Car.Convertible=%s", pgman->GetPropertyValueAsString("Car.Convertible").c_str());
|
wxLogDebug("Did not match: Car.Convertible=%s", pgman->GetPropertyValueAsString("Car.Convertible").c_str());
|
||||||
RT_FAILURE();
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@@ -1373,37 +1373,28 @@ void wxSystemColourProperty::OnCustomPaint( wxDC& dc, const wxRect& rect,
|
|||||||
|
|
||||||
bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& text, int argFlags ) const
|
bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& text, int argFlags ) const
|
||||||
{
|
{
|
||||||
//
|
wxString custColName(m_choices.GetLabel(GetCustomColourIndex()));
|
||||||
// Accept colour format "[Name] [(R,G,B)]"
|
wxString colStr(text);
|
||||||
// Name takes precedence.
|
colStr.Trim(true);
|
||||||
//
|
colStr.Trim(false);
|
||||||
wxString colourName;
|
|
||||||
wxString colourRGB;
|
|
||||||
|
|
||||||
int ppos = text.Find(wxT("("));
|
wxColour customColour;
|
||||||
|
bool conversionSuccess = false;
|
||||||
|
|
||||||
if ( ppos == wxNOT_FOUND )
|
if ( colStr != custColName )
|
||||||
{
|
{
|
||||||
colourName = text;
|
// Convert (R,G,B) to rgb(R,G,B)
|
||||||
}
|
if ( colStr.Find(wxS("(")) == 0 )
|
||||||
else
|
|
||||||
{
|
{
|
||||||
colourName = text.substr(0, ppos);
|
colStr = wxS("rgb") + colStr;
|
||||||
colourRGB = text.substr(ppos, text.length()-ppos);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Strip spaces from extremities
|
conversionSuccess = customColour.Set(colStr);
|
||||||
colourName.Trim(true);
|
}
|
||||||
colourName.Trim(false);
|
|
||||||
colourRGB.Trim(true);
|
|
||||||
|
|
||||||
// Validate colourRGB string - (1,1,1) is shortest allowed
|
if ( !conversionSuccess && m_choices.GetCount() &&
|
||||||
if ( colourRGB.length() < 7 )
|
|
||||||
colourRGB.clear();
|
|
||||||
|
|
||||||
if ( colourRGB.length() == 0 && m_choices.GetCount() &&
|
|
||||||
!(m_flags & wxPG_PROP_HIDE_CUSTOM_COLOUR) &&
|
!(m_flags & wxPG_PROP_HIDE_CUSTOM_COLOUR) &&
|
||||||
colourName == m_choices.GetLabel(GetCustomColourIndex()) )
|
colStr == custColName )
|
||||||
{
|
{
|
||||||
if ( !(argFlags & wxPG_EDITABLE_VALUE ))
|
if ( !(argFlags & wxPG_EDITABLE_VALUE ))
|
||||||
{
|
{
|
||||||
@@ -1421,10 +1412,12 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te
|
|||||||
|
|
||||||
bool done = false;
|
bool done = false;
|
||||||
|
|
||||||
if ( colourName.length() )
|
if ( !conversionSuccess )
|
||||||
{
|
{
|
||||||
// Try predefined colour first
|
// Try predefined colour first
|
||||||
bool res = wxEnumProperty::StringToValue(value, colourName, argFlags);
|
bool res = wxEnumProperty::StringToValue(value,
|
||||||
|
colStr,
|
||||||
|
argFlags);
|
||||||
if ( res && GetIndex() >= 0 )
|
if ( res && GetIndex() >= 0 )
|
||||||
{
|
{
|
||||||
val.m_type = GetIndex();
|
val.m_type = GetIndex();
|
||||||
@@ -1437,23 +1430,12 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te
|
|||||||
done = true;
|
done = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( colourRGB.length() && !done )
|
else
|
||||||
{
|
{
|
||||||
// Then check custom colour.
|
|
||||||
val.m_type = wxPG_COLOUR_CUSTOM;
|
val.m_type = wxPG_COLOUR_CUSTOM;
|
||||||
|
val.m_colour = customColour;
|
||||||
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;
|
done = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ( !done )
|
if ( !done )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user