// Created: 2004-09-25
// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx/wx.h".
wxPGEditor)
-// Trivial destructor.
+// Destructor. It is useful to reset the global pointer in it.
wxPGSpinCtrlEditor::~wxPGSpinCtrlEditor()
{
+ wxPG_EDITOR(SpinCtrl) = NULL;
}
-
// Create controls and initialize event handling.
wxPGWindowList wxPGSpinCtrlEditor::CreateControls( wxPropertyGrid* propgrid, wxPGProperty* property,
const wxPoint& pos, const wxSize& sz ) const
wxPGDatePickerCtrlEditor::~wxPGDatePickerCtrlEditor()
{
+ wxPG_EDITOR(DatePickerCtrl) = NULL;
}
wxPGWindowList wxPGDatePickerCtrlEditor::CreateControls( wxPropertyGrid* propgrid,
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)"),
- (int)col.Red(),
- (int)col.Green(),
- (int)col.Blue());
+ {
+
+ 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,
index = m_choices.Index(val.m_type);
}
- return ColourToString(val.m_colour, index);
+ return ColourToString(val.m_colour, index, argFlags);
}
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 )
- {
- colourName = text;
- }
- else
+ if ( colStr != custColName )
{
- colourName = text.substr(0, ppos);
- colourRGB = text.substr(ppos, text.length()-ppos);
- }
+ if ( colStr.Find(wxS("(")) == 0 )
+ {
+ // Eliminate whitespace
+ colStr.Replace(wxS(" "), wxEmptyString);
- // Strip spaces from extremities
- colourName.Trim(true);
- colourName.Trim(false);
- colourRGB.Trim(true);
+ 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();
+ }
+ }
- // Validate colourRGB string - (1,1,1) is shortest allowed
- if ( colourRGB.length() < 7 )
- colourRGB.clear();
+ if ( !conversionSuccess )
+ conversionSuccess = customColour.Set(colStr);
+ }
- 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 ))
{
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();
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 )
wxFileProperty::OnSetValue();
// Delete old image
- if ( m_pImage )
- {
- delete m_pImage;
- m_pImage = NULL;
- }
- if ( m_pBitmap )
- {
- delete m_pBitmap;
- m_pBitmap = NULL;
- }
+ wxDELETE(m_pImage);
+ wxDELETE(m_pBitmap);
wxFileName filename = GetFileName();
{
m_pImage->Rescale( rect.width, rect.height );
m_pBitmap = new wxBitmap( *m_pImage );
- delete m_pImage;
- m_pImage = NULL;
+ wxDELETE(m_pImage);
}
dc.DrawBitmap( *m_pBitmap, rect.x, rect.y, false );