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 support for saving TGA files.
- Added wxArtProvider returning higher quality icons from Tango project.
- wxPropertyGrid: Added "HasAlpha" attribute for wxColourProperty.
GTK:

View File

@@ -203,7 +203,8 @@ public:
Override in derived class to customize how colours are printed as
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
(default is last).

View File

@@ -697,6 +697,12 @@ wxPG_PROP_BEING_DELETED = 0x00200000
*/
#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")
/**
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
below in wxSystemColourProperty section for details.
Setting "HasAlpha" attribute to @true for this property allows user to
edit the alpha colour component.
@subsection wxFontProperty
Represents wxFont. Various sub-properties are used to edit individual

View File

@@ -1259,13 +1259,19 @@ void FormMain::PopulateWithExamples ()
#endif
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->GetProperty(wxT("ColourProperty"))->SetAutoUnspecified(true);
pg->SetPropertyHelpString( wxT("ColourProperty"),
wxT("wxPropertyGrid::SetPropertyEditor method has been used to change ")
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
// 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);
#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_SET2 (wxSTAY_ON_TOP|wxCAPTION|wxICONIZE|wxSYSTEM_MENU)
@@ -762,6 +765,15 @@ bool FormMain::RunTests( bool fullTest, bool interactive )
col << pgman->GetPropertyValue("ColourProperty");
if ( col != wxColour(254, 134, 11) )
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,16 +1143,36 @@ wxColour wxSystemColourProperty::GetColour( int index ) const
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 )
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.Green(),
(int)col.Blue());
}
}
else
{
return m_choices.GetLabel(index);
}
}
wxString wxSystemColourProperty::ValueToString( wxVariant& value,
int argFlags ) const
@@ -1178,7 +1198,7 @@ wxString wxSystemColourProperty::ValueToString( wxVariant& value,
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 )
{
// Convert (R,G,B) to rgb(R,G,B)
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;
}
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);
}