X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/47450ed1372eba027ed58bd8b5af57e017320f12..d93cc830804df17292da7471856a5570574e0bb7:/src/propgrid/advprops.cpp diff --git a/src/propgrid/advprops.cpp b/src/propgrid/advprops.cpp index ba05073f6b..b29d63a48c 100644 --- a/src/propgrid/advprops.cpp +++ b/src/propgrid/advprops.cpp @@ -6,7 +6,7 @@ // 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". @@ -240,12 +240,12 @@ WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(SpinCtrl, 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 @@ -449,6 +449,7 @@ WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(DatePickerCtrl, wxPGDatePickerCtrlEditor::~wxPGDatePickerCtrlEditor() { + wxPG_EDITOR(DatePickerCtrl) = NULL; } wxPGWindowList wxPGDatePickerCtrlEditor::CreateControls( wxPropertyGrid* propgrid, @@ -1372,37 +1373,28 @@ void wxSystemColourProperty::OnCustomPaint( wxDC& dc, const wxRect& rect, 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 ) + if ( colStr != custColName ) { - colourName = text; - } - else - { - colourName = text.substr(0, ppos); - colourRGB = text.substr(ppos, text.length()-ppos); - } - - // Strip spaces from extremities - colourName.Trim(true); - colourName.Trim(false); - colourRGB.Trim(true); + // Convert (R,G,B) to rgb(R,G,B) + if ( colStr.Find(wxS("(")) == 0 ) + { + colStr = wxS("rgb") + colStr; + } - // Validate colourRGB string - (1,1,1) is shortest allowed - if ( colourRGB.length() < 7 ) - colourRGB.clear(); + 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 )) { @@ -1420,10 +1412,12 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te 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(); @@ -1436,22 +1430,11 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te 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 ) @@ -1821,16 +1804,8 @@ void wxImageFileProperty::OnSetValue() 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(); @@ -1859,8 +1834,7 @@ void wxImageFileProperty::OnCustomPaint( wxDC& dc, { 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 );