X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1c4293cb91327247ad69e6ec8d589bfaa299db28..9472f3d79b37750250b28138d51d7cfb75b5d805:/samples/propgrid/sampleprops.cpp diff --git a/samples/propgrid/sampleprops.cpp b/samples/propgrid/sampleprops.cpp index 03978de880..142771bd11 100644 --- a/samples/propgrid/sampleprops.cpp +++ b/samples/propgrid/sampleprops.cpp @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: 2006-03-05 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) Jaakko Salli // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// @@ -48,7 +48,7 @@ bool operator == (const wxFontData&, const wxFontData&) #include -WX_PG_IMPLEMENT_WXOBJECT_VARIANT_DATA(wxPGVariantDataFontData, wxFontData) +IMPLEMENT_VARIANT_OBJECT_SHALLOWCMP(wxFontData) WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontProperty, wxFontData,const wxFontData&,TextCtrlAndButton) @@ -56,51 +56,68 @@ WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontProperty, wxFontDataProperty::wxFontDataProperty( const wxString& label, const wxString& name, const wxFontData& value ) : wxFontProperty(label,name,value.GetInitialFont()) { - // Set initial value - should be done in a simpler way like this - // (instead of calling SetValue) in derived (wxObject) properties. - m_value_wxFontData << value; - - wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData); + wxFontData fontData(value); // Fix value. fontData.SetChosenFont(value.GetInitialFont()); if ( !fontData.GetColour().Ok() ) fontData.SetColour(*wxBLACK); + // Set initial value - should be done in a simpler way like this + // (instead of calling SetValue) in derived (wxObject) properties. + m_value_wxFontData << value; + // Add extra children. - AddChild( new wxColourProperty(_("Colour"),wxPG_LABEL, + AddChild( new wxColourProperty(_("Colour"), wxPG_LABEL, fontData.GetColour() ) ); - } wxFontDataProperty::~wxFontDataProperty () { } void wxFontDataProperty::OnSetValue() { - if ( !(&wxFontDataFromVariant(m_value)) ) + if ( m_value.GetType() != "wxFontData" ) { - wxFont* pFont = &wxFontFromVariant(m_value); - if ( pFont ) + if ( m_value.GetType() == "wxFont" ) { + wxFont font; + font << m_value; wxFontData fontData; - fontData.SetChosenFont(*pFont); - m_value = WXVARIANT(fontData); + fontData.SetChosenFont(font); + if ( !m_value_wxFontData.IsNull() ) + { + wxFontData oldFontData; + oldFontData << m_value_wxFontData; + fontData.SetColour(oldFontData.GetColour()); + } + else + { + fontData.SetColour(*wxBLACK); + } + wxVariant variant; + variant << fontData; + m_value_wxFontData = variant; } else { wxFAIL_MSG(wxT("Value to wxFontDataProperty must be eithe wxFontData or wxFont")); } } + else + { + // Set m_value to wxFont so that wxFontProperty methods will work + // correctly. + m_value_wxFontData = m_value; - // Set m_value to wxFont so that wxFontProperty methods will work - // correctly. - m_value_wxFontData = m_value; - wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData); + wxFontData fontData; + fontData << m_value_wxFontData; - wxFont font = fontData.GetChosenFont(); - if ( !font.Ok() ) - font = wxFont(10,wxSWISS,wxNORMAL,wxNORMAL); - m_value = WXVARIANT(font); + wxFont font = fontData.GetChosenFont(); + if ( !font.Ok() ) + font = wxFont(10,wxSWISS,wxNORMAL,wxNORMAL); + + m_value = WXVARIANT(font); + } } wxVariant wxFontDataProperty::DoGetValue() const @@ -114,10 +131,10 @@ bool wxFontDataProperty::OnEvent( wxPropertyGrid* propgrid, { if ( propgrid->IsMainButtonEvent(event) ) { - // Update value from last minute changes - PrepareValueForDialogEditing(propgrid); + wxVariant useValue = propgrid->GetUncommittedPropertyValue(); - wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData); + wxFontData fontData; + fontData << useValue; fontData.SetInitialFont(fontData.GetChosenFont()); @@ -125,7 +142,9 @@ bool wxFontDataProperty::OnEvent( wxPropertyGrid* propgrid, if ( dlg.ShowModal() == wxID_OK ) { - SetValueInEvent( wxFontDataToVariant(dlg.GetFontData()) ); + wxVariant variant; + variant << dlg.GetFontData(); + SetValueInEvent( variant ); return true; } } @@ -135,16 +154,17 @@ bool wxFontDataProperty::OnEvent( wxPropertyGrid* propgrid, void wxFontDataProperty::RefreshChildren() { wxFontProperty::RefreshChildren(); - if ( GetChildCount() < 6 ) // Number is count of inherit prop's children + 1. + if ( GetChildCount() < 6 ) // Number is count of wxFontProperty's children + 1. return; - wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData); + wxFontData fontData; fontData << m_value_wxFontData; wxVariant variant; variant << fontData.GetColour(); Item(6)->SetValue( variant ); } void wxFontDataProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { - wxFontData& fontData = wxFontDataFromVariant(thisValue); + wxFontData fontData; + fontData << thisValue; wxColour col; wxVariant variant; @@ -155,11 +175,15 @@ void wxFontDataProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxV fontData.SetColour( col ); break; default: - // Transfer between subset to superset. - variant = WXVARIANT(fontData.GetChosenFont()); + // Transfer from subset to superset. + wxFont font = fontData.GetChosenFont(); + variant = WXVARIANT(font); wxFontProperty::ChildChanged( variant, childIndex, childValue ); - fontData.SetChosenFont(wxFontFromVariant(variant)); + font << variant; + fontData.SetChosenFont(font); } + + thisValue << fontData; } // ----------------------------------------------------------------------- @@ -182,14 +206,14 @@ wxSizeProperty::~wxSizeProperty() { } void wxSizeProperty::RefreshChildren() { if ( !GetChildCount() ) return; - const wxSize& size = wxSizeFromVariant(m_value); + const wxSize& size = wxSizeRefFromVariant(m_value); Item(0)->SetValue( (long)size.x ); Item(1)->SetValue( (long)size.y ); } void wxSizeProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { - wxSize& size = wxSizeFromVariant(thisValue); + wxSize& size = wxSizeRefFromVariant(thisValue); int val = wxPGVariantToInt(childValue); switch ( childIndex ) { @@ -218,14 +242,14 @@ wxPointProperty::~wxPointProperty() { } void wxPointProperty::RefreshChildren() { if ( !GetChildCount() ) return; - const wxPoint& point = wxPointFromVariant(m_value); + const wxPoint& point = wxPointRefFromVariant(m_value); Item(0)->SetValue( (long)point.x ); Item(1)->SetValue( (long)point.y ); } void wxPointProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { - wxPoint& point = wxPointFromVariant(thisValue); + wxPoint& point = wxPointRefFromVariant(thisValue); int val = wxPGVariantToInt(childValue); switch ( childIndex ) { @@ -452,7 +476,7 @@ bool operator == (const wxArrayDouble& a, const wxArrayDouble& b) return TRUE; } -WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantDataArrayDouble, wxArrayDouble) +WX_PG_IMPLEMENT_VARIANT_DATA_DUMMY_EQ(wxArrayDouble) WX_PG_IMPLEMENT_PROPERTY_CLASS(wxArrayDoubleProperty, wxPGProperty, @@ -478,7 +502,7 @@ wxArrayDoubleProperty::wxArrayDoubleProperty (const wxString& label, m_delimiter = use_delimiter; - SetValue( wxArrayDoubleToVariant(array) ); + SetValue( WXVARIANT(array) ); } wxArrayDoubleProperty::~wxArrayDoubleProperty () { } @@ -509,7 +533,7 @@ void wxArrayDoubleProperty::GenerateValueAsString( wxString& target, int prec, b target.Empty(); - const wxArrayDouble& value = wxArrayDoubleFromVariant(m_value); + const wxArrayDouble& value = wxArrayDoubleRefFromVariant(m_value); for ( i=0; iIsMainButtonEvent(event) ) { - wxArrayDouble& value = wxArrayDoubleFromVariant(m_value); - // Update the value in case of last minute changes - PrepareValueForDialogEditing(propgrid); + wxVariant useValue = propgrid->GetUncommittedPropertyValue(); + + wxArrayDouble& value = wxArrayDoubleRefFromVariant(useValue); // Create editor dialog. wxArrayDoubleEditorDialog dlg; @@ -544,7 +568,7 @@ bool wxArrayDoubleProperty::OnEvent( wxPropertyGrid* propgrid, int res = dlg.ShowModal(); if ( res == wxID_OK && dlg.IsModified() ) { - SetValueInEvent( wxArrayDoubleToVariant(dlg.GetArray()) ); + SetValueInEvent( WXVARIANT(dlg.GetArray()) ); return true; } return false; @@ -591,9 +615,9 @@ bool wxArrayDoubleProperty::StringToValue( wxVariant& variant, const wxString& t return false; } - if ( !(wxArrayDoubleFromVariant(m_value) == new_array) ) + if ( !(wxArrayDoubleRefFromVariant(m_value) == new_array) ) { - variant = wxArrayDoubleToVariant(new_array); + variant = WXVARIANT(new_array); return true; }