From 82106a9d9eb5bf1ed2b44798a5f2512032f333c4 Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Sun, 22 Feb 2015 22:36:17 +0100 Subject: [PATCH] Allow use of all wxPG colours. Restore original list of wxPG-specific colours. wxPG-specific colours are added to the colour database when wxColourProperty is created (already existing colours are not overwritten by wxPG ones). This is the backport of r76893 and r76894. See #15597. --- src/propgrid/advprops.cpp | 54 ++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/src/propgrid/advprops.cpp b/src/propgrid/advprops.cpp index ce31cfe610..d557205ad0 100644 --- a/src/propgrid/advprops.cpp +++ b/src/propgrid/advprops.cpp @@ -1543,28 +1543,46 @@ bool wxSystemColourProperty::DoSetAttribute( const wxString& name, wxVariant& va static const wxChar* const gs_cp_es_normcolour_labels[] = { wxT("Black"), - wxT("Red"), + wxT("Maroon"), + wxT("Navy"), + wxT("Purple"), + wxT("Teal"), + wxT("Gray"), wxT("Green"), + wxT("Olive"), + wxT("Brown"), wxT("Blue"), - wxT("Cyan"), - wxT("Magenta"), + wxT("Fuchsia"), + wxT("Red"), + wxT("Orange"), + wxT("Silver"), + wxT("Lime"), + wxT("Aqua"), wxT("Yellow"), wxT("White"), - wxT("Grey"), wxT("Custom"), (const wxChar*) NULL }; static const unsigned long gs_cp_es_normcolour_colours[] = { wxPG_COLOUR(0,0,0), - wxPG_COLOUR(255,0,0), - wxPG_COLOUR(0,255,0), + wxPG_COLOUR(128,0,0), + wxPG_COLOUR(0,0,128), + wxPG_COLOUR(128,0,128), + wxPG_COLOUR(0,128,128), + wxPG_COLOUR(128,128,128), + wxPG_COLOUR(0,128,0), + wxPG_COLOUR(128,128,0), + wxPG_COLOUR(166,124,81), wxPG_COLOUR(0,0,255), - wxPG_COLOUR(0,255,255), wxPG_COLOUR(255,0,255), + wxPG_COLOUR(255,0,0), + wxPG_COLOUR(247,148,28), + wxPG_COLOUR(192,192,192), + wxPG_COLOUR(0,255,0), + wxPG_COLOUR(0,255,255), wxPG_COLOUR(255,255,0), wxPG_COLOUR(255,255,255), - wxPG_COLOUR(128,128,128), wxPG_COLOUR(0,0,0) }; @@ -1580,6 +1598,24 @@ wxColourProperty::wxColourProperty( const wxString& label, NULL, &gs_wxColourProperty_choicesCache, value ) { + wxASSERT_MSG( wxTheColourDatabase, wxT("No colour database") ); + if ( wxTheColourDatabase ) + { + // Extended colour database with custom PG colours. + const wxChar* const* colourLabels = gs_cp_es_normcolour_labels; + for ( int i = 0; *colourLabels; colourLabels++, i++ ) + { + wxColour clr = wxTheColourDatabase->Find(*colourLabels); + // Use standard wx colour value if its label was found, + // otherwise register custom PG colour. + if ( !clr.IsOk() ) + { + clr.Set(gs_cp_es_normcolour_colours[i]); + wxTheColourDatabase->AddColour(*colourLabels, clr); + } + } + } + Init( value ); m_flags |= wxPG_PROP_TRANSLATE_CUSTOM; @@ -1616,7 +1652,7 @@ wxString wxColourProperty::ValueToString( wxVariant& value, wxColour wxColourProperty::GetColour( int index ) const { - return gs_cp_es_normcolour_colours[m_choices.GetValue(index)]; + return wxColour(gs_cp_es_normcolour_labels[m_choices.GetValue(index)]); } wxVariant wxColourProperty::DoTranslateVal( wxColourPropertyValue& v ) const