Added 'HasAlpha' attribute for wxColourProperty. Setting it to true allows user to edit the alpha component.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66520 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2011-01-02 10:14:29 +00:00
parent 2e5f9929e6
commit 6f3f38980f
7 changed files with 85 additions and 11 deletions

View File

@@ -451,6 +451,7 @@ All (GUI):
- Added wxImage::Rotate180() (Jeff Tupper). - Added wxImage::Rotate180() (Jeff Tupper).
- Added support for saving TGA files. - Added support for saving TGA files.
- Added wxArtProvider returning higher quality icons from Tango project. - Added wxArtProvider returning higher quality icons from Tango project.
- wxPropertyGrid: Added "HasAlpha" attribute for wxColourProperty.
GTK: GTK:

View File

@@ -203,7 +203,8 @@ public:
Override in derived class to customize how colours are printed as Override in derived class to customize how colours are printed as
strings. strings.
*/ */
virtual wxString ColourToString( const wxColour& col, int index ) const; virtual wxString ColourToString( const wxColour& col, int index,
int argFlags = 0 ) const;
/** Returns index of entry that triggers colour picker dialog /** Returns index of entry that triggers colour picker dialog
(default is last). (default is last).

View File

@@ -697,6 +697,12 @@ wxPG_PROP_BEING_DELETED = 0x00200000
*/ */
#define wxPG_COLOUR_ALLOW_CUSTOM wxS("AllowCustom") #define wxPG_COLOUR_ALLOW_CUSTOM wxS("AllowCustom")
/**
wxColourProperty and its kind: Set to True in order to support editing
alpha colour component.
*/
#define wxPG_COLOUR_HAS_ALPHA wxS("HasAlpha")
/** @} /** @}
*/ */

View File

@@ -173,6 +173,12 @@
*/ */
#define wxPG_COLOUR_ALLOW_CUSTOM wxS("AllowCustom") #define wxPG_COLOUR_ALLOW_CUSTOM wxS("AllowCustom")
/**
wxColourProperty and its kind: Set to True in order to support editing
alpha colour component.
*/
#define wxPG_COLOUR_HAS_ALPHA wxS("HasAlpha")
/** @} /** @}
*/ */
@@ -527,6 +533,9 @@ wxPG_PROP_BEING_DELETED = 0x00200000
There are various sub-classing opportunities with this class. See There are various sub-classing opportunities with this class. See
below in wxSystemColourProperty section for details. below in wxSystemColourProperty section for details.
Setting "HasAlpha" attribute to @true for this property allows user to
edit the alpha colour component.
@subsection wxFontProperty @subsection wxFontProperty
Represents wxFont. Various sub-properties are used to edit individual Represents wxFont. Various sub-properties are used to edit individual

View File

@@ -1259,13 +1259,19 @@ void FormMain::PopulateWithExamples ()
#endif #endif
pid = pg->Append( new wxColourProperty(wxT("ColourProperty"),wxPG_LABEL,*wxRED) ); pid = pg->Append( new wxColourProperty(wxT("ColourProperty"),wxPG_LABEL,*wxRED) );
//pg->SetPropertyAttribute(pid,wxPG_COLOUR_ALLOW_CUSTOM,false);
pg->SetPropertyEditor( wxT("ColourProperty"), wxPGEditor_ComboBox ); pg->SetPropertyEditor( wxT("ColourProperty"), wxPGEditor_ComboBox );
pg->GetProperty(wxT("ColourProperty"))->SetAutoUnspecified(true); pg->GetProperty(wxT("ColourProperty"))->SetAutoUnspecified(true);
pg->SetPropertyHelpString( wxT("ColourProperty"), pg->SetPropertyHelpString( wxT("ColourProperty"),
wxT("wxPropertyGrid::SetPropertyEditor method has been used to change ") wxT("wxPropertyGrid::SetPropertyEditor method has been used to change ")
wxT("editor of this property to wxPGEditor_ComboBox)")); wxT("editor of this property to wxPGEditor_ComboBox)"));
pid = pg->Append( new wxColourProperty("ColourPropertyWithAlpha",
wxPG_LABEL,
wxColour(15, 200, 95, 128)) );
pg->SetPropertyAttribute("ColourPropertyWithAlpha", "HasAlpha", true);
pg->SetPropertyHelpString("ColourPropertyWithAlpha",
"Attribute \"HasAlpha\" is set to true for this property.");
// //
// This demonstrates using alternative editor for colour property // This demonstrates using alternative editor for colour property
// to trigger colour dialog directly from button. // to trigger colour dialog directly from button.

View File

@@ -616,6 +616,9 @@ bool FormMain::RunTests( bool fullTest, bool interactive )
dt2.SetYear(dt2.GetYear()-10); dt2.SetYear(dt2.GetYear()-10);
#endif #endif
wxColour colWithAlpha(1, 128, 254, 100);
wxString colWithAlphaStr(colWithAlpha.GetAsString(wxC2S_CSS_SYNTAX));
#define FLAG_TEST_SET1 (wxCAPTION|wxCLOSE_BOX|wxSYSTEM_MENU|wxRESIZE_BORDER) #define FLAG_TEST_SET1 (wxCAPTION|wxCLOSE_BOX|wxSYSTEM_MENU|wxRESIZE_BORDER)
#define FLAG_TEST_SET2 (wxSTAY_ON_TOP|wxCAPTION|wxICONIZE|wxSYSTEM_MENU) #define FLAG_TEST_SET2 (wxSTAY_ON_TOP|wxCAPTION|wxICONIZE|wxSYSTEM_MENU)
@@ -762,6 +765,15 @@ bool FormMain::RunTests( bool fullTest, bool interactive )
col << pgman->GetPropertyValue("ColourProperty"); col << pgman->GetPropertyValue("ColourProperty");
if ( col != wxColour(254, 134, 11) ) if ( col != wxColour(254, 134, 11) )
RT_FAILURE(); RT_FAILURE();
pgman->SetPropertyValueString("ColourPropertyWithAlpha",
"(10, 20, 30, 128)");
col << pgman->GetPropertyValue("ColourPropertyWithAlpha");
if ( col != wxColour(10, 20, 30, 128) )
RT_FAILURE();
if ( pgman->GetPropertyValueAsString("ColourPropertyWithAlpha")
!= "(10,20,30,128)" )
RT_FAILURE();
} }
{ {

View File

@@ -1143,15 +1143,35 @@ wxColour wxSystemColourProperty::GetColour( int index ) const
return wxSystemSettings::GetColour( (wxSystemColour)index ); return wxSystemSettings::GetColour( (wxSystemColour)index );
} }
wxString wxSystemColourProperty::ColourToString( const wxColour& col, int index ) const wxString wxSystemColourProperty::ColourToString( const wxColour& col,
int index,
int argFlags ) const
{ {
if ( index == wxNOT_FOUND ) if ( index == wxNOT_FOUND )
return wxString::Format(wxT("(%i,%i,%i)"), {
if ( (argFlags & wxPG_FULL_VALUE) ||
GetAttributeAsLong(wxPG_COLOUR_HAS_ALPHA, 0) )
{
return wxString::Format(wxS("(%i,%i,%i,%i)"),
(int)col.Red(),
(int)col.Green(),
(int)col.Blue(),
(int)col.Alpha());
}
else
{
return wxString::Format(wxS("(%i,%i,%i)"),
(int)col.Red(), (int)col.Red(),
(int)col.Green(), (int)col.Green(),
(int)col.Blue()); (int)col.Blue());
}
}
else else
{
return m_choices.GetLabel(index); return m_choices.GetLabel(index);
}
} }
wxString wxSystemColourProperty::ValueToString( wxVariant& value, wxString wxSystemColourProperty::ValueToString( wxVariant& value,
@@ -1178,7 +1198,7 @@ wxString wxSystemColourProperty::ValueToString( wxVariant& value,
index = m_choices.Index(val.m_type); index = m_choices.Index(val.m_type);
} }
return ColourToString(val.m_colour, index); return ColourToString(val.m_colour, index, argFlags);
} }
@@ -1383,12 +1403,31 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te
if ( colStr != custColName ) if ( colStr != custColName )
{ {
// Convert (R,G,B) to rgb(R,G,B)
if ( colStr.Find(wxS("(")) == 0 ) if ( colStr.Find(wxS("(")) == 0 )
{ {
// Eliminate whitespace
colStr.Replace(wxS(" "), wxEmptyString);
int commaCount = colStr.Freq(wxS(','));
if ( commaCount == 2 )
{
// Convert (R,G,B) to rgb(R,G,B)
colStr = wxS("rgb") + colStr; colStr = wxS("rgb") + colStr;
} }
else if ( commaCount == 3 )
{
// We have int alpha, CSS format that wxColour takes as
// input processes float alpha. So, let's parse the colour
// ourselves instead of trying to convert it to a format
// that wxColour::FromString() understands.
int r = -1, g = -1, b = -1, a = -1;
wxSscanf(colStr, wxS("(%i,%i,%i,%i)"), &r, &g, &b, &a);
customColour.Set(r, g, b, a);
conversionSuccess = customColour.IsOk();
}
}
if ( !conversionSuccess )
conversionSuccess = customColour.Set(colStr); conversionSuccess = customColour.Set(colStr);
} }