X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1c4293cb91327247ad69e6ec8d589bfaa299db28..bce49490f66910767d8a3dd7ea5ebafc5f40005b:/src/propgrid/advprops.cpp?ds=inline diff --git a/src/propgrid/advprops.cpp b/src/propgrid/advprops.cpp index 45ea5fda77..7a58087922 100644 --- a/src/propgrid/advprops.cpp +++ b/src/propgrid/advprops.cpp @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: 2004-09-25 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) Jaakko Salli // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// @@ -16,6 +16,8 @@ #pragma hdrstop #endif +#if wxUSE_PROPGRID + #ifndef WX_PRECOMP #include "wx/defs.h" #include "wx/object.h" @@ -40,24 +42,24 @@ #include "wx/scrolwin.h" #include "wx/dirdlg.h" #include "wx/combobox.h" - #include "wx/layout.h" #include "wx/sizer.h" #include "wx/textdlg.h" #include "wx/filedlg.h" #include "wx/intl.h" + #include "wx/wxcrtvararg.h" #endif #define __wxPG_SOURCE_FILE__ -#include +#include "wx/propgrid/propgrid.h" #if wxPG_INCLUDE_ADVPROPS -#include +#include "wx/propgrid/advprops.h" #ifdef __WXMSW__ - #include - #include + #include "wx/msw/private.h" + #include "wx/msw/dc.h" #endif // ----------------------------------------------------------------------- @@ -111,9 +113,9 @@ bool operator == (const wxArrayInt& array1, const wxArrayInt& array2) #if wxUSE_SPINBTN -// This macro also defines global wxPGEditor_SpinCtrl for storing -// the singleton class instance. -WX_PG_IMPLEMENT_EDITOR_CLASS(SpinCtrl,wxPGSpinCtrlEditor,wxPGEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(SpinCtrl, + wxPGSpinCtrlEditor, + wxPGEditor) // Trivial destructor. @@ -140,15 +142,13 @@ wxPGWindowList wxPGSpinCtrlEditor::CreateControls( wxPropertyGrid* propgrid, wxP wnd2->SetRange( INT_MIN, INT_MAX ); wnd2->SetValue( 0 ); - propgrid->Connect( wxPG_SUBID2, wxEVT_SCROLL_LINEUP, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent, NULL, propgrid ); - propgrid->Connect( wxPG_SUBID2, wxEVT_SCROLL_LINEDOWN, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent, NULL, propgrid ); - propgrid->Connect( wxPG_SUBID1, wxEVT_KEY_DOWN, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent, NULL, propgrid ); + wxWindowID id = wnd2->GetId(); + wnd2->Connect( id, wxEVT_SCROLL_LINEUP, + wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent), + NULL, propgrid ); + wnd2->Connect( id, wxEVT_SCROLL_LINEDOWN, + wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent), + NULL, propgrid ); // Let's add validator to make sure only numbers can be entered wxTextValidator validator(wxFILTER_NUMERIC, &m_tempString); @@ -156,6 +156,10 @@ wxPGWindowList wxPGSpinCtrlEditor::CreateControls( wxPropertyGrid* propgrid, wxP wxTextCtrl* wnd1 = (wxTextCtrl*) wxPGTextCtrlEditor::CreateControls( propgrid, property, pos, tcSz ).m_primary; wnd1->SetValidator(validator); + wnd1->Connect( wnd1->GetId(), wxEVT_KEY_DOWN, + wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent), + NULL, propgrid ); + return wxPGWindowList(wnd1, wnd2); } @@ -277,17 +281,20 @@ bool wxPGSpinCtrlEditor::OnEvent( wxPropertyGrid* propgrid, wxPGProperty* proper #if wxUSE_DATEPICKCTRL -#include -#include +#include "wx/datectrl.h" +#include "wx/dateevt.h" class wxPGDatePickerCtrlEditor : public wxPGEditor { - WX_PG_DECLARE_EDITOR_CLASS(wxPGDatePickerCtrlEditor) + DECLARE_DYNAMIC_CLASS(wxPGDatePickerCtrlEditor) public: virtual ~wxPGDatePickerCtrlEditor(); - wxPG_DECLARE_CREATECONTROLS - + wxString GetName() const; + virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& size) const; virtual void UpdateControl( wxPGProperty* property, wxWindow* wnd ) const; virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property, wxWindow* wnd, wxEvent& event ) const; @@ -296,7 +303,9 @@ public: }; -WX_PG_IMPLEMENT_EDITOR_CLASS(DatePickerCtrl,wxPGDatePickerCtrlEditor,wxPGEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(DatePickerCtrl, + wxPGDatePickerCtrlEditor, + wxPGEditor) wxPGDatePickerCtrlEditor::~wxPGDatePickerCtrlEditor() @@ -333,9 +342,9 @@ wxPGWindowList wxPGDatePickerCtrlEditor::CreateControls( wxPropertyGrid* propgri // Connect all required events to grid's OnCustomEditorEvent // (all relevenat wxTextCtrl, wxComboBox and wxButton events are // already connected) - propgrid->Connect( wxPG_SUBID1, wxEVT_DATE_CHANGED, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent ); + ctrl->Connect( wxPG_SUBID1, wxEVT_DATE_CHANGED, + wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent), + NULL, propgrid ); #ifdef __WXMSW__ ctrl->Show(); @@ -391,8 +400,8 @@ void wxPGDatePickerCtrlEditor::SetValueToUnspecified( wxPGProperty* WXUNUSED(pro // wxFontProperty // ----------------------------------------------------------------------- -#include -#include +#include "wx/fontdlg.h" +#include "wx/fontenum.h" static const wxChar* gs_fp_es_family_labels[] = { wxT("Default"), wxT("Decorative"), @@ -444,7 +453,7 @@ wxFontProperty::wxFontProperty( const wxString& label, const wxString& name, const wxFont& value ) : wxPGProperty(label,name) { - SetValue( wxFontToVariant(value) ); + SetValue(WXVARIANT(value)); // Initialize font family choices list if ( !wxPGGlobalVars->m_fontFamilyChoices ) @@ -465,11 +474,14 @@ wxFontProperty::wxFontProperty( const wxString& label, const wxString& name, wxString emptyString(wxEmptyString); - wxFont& font = wxFontFromVariant(m_value); + wxFont font; + font << m_value; - AddChild( new wxIntProperty( _("Point Size"),emptyString,(long)font.GetPointSize() ) ); + SetParentalType(wxPG_PROP_AGGREGATE); - AddChild( new wxEnumProperty(_("Family"), emptyString, + AddChild( new wxIntProperty( _("Point Size"), wxS("Point Size"),(long)font.GetPointSize() ) ); + + AddChild( new wxEnumProperty(_("Family"), wxS("PointSize"), gs_fp_es_family_labels,gs_fp_es_family_values, font.GetFamily()) ); @@ -479,20 +491,20 @@ wxFontProperty::wxFontProperty( const wxString& label, const wxString& name, wxPGGlobalVars->m_fontFamilyChoices->Index(faceName) == wxNOT_FOUND ) wxPGGlobalVars->m_fontFamilyChoices->AddAsSorted(faceName); - wxPGProperty* p = new wxEnumProperty(_("Face Name"),emptyString, + wxPGProperty* p = new wxEnumProperty(_("Face Name"), wxS("Face Name"), *wxPGGlobalVars->m_fontFamilyChoices); p->SetValueFromString(faceName, wxPG_FULL_VALUE); AddChild( p ); - AddChild( new wxEnumProperty(_("Style"),emptyString, + AddChild( new wxEnumProperty(_("Style"), wxS("Style"), gs_fp_es_style_labels,gs_fp_es_style_values,font.GetStyle()) ); - AddChild( new wxEnumProperty(_("Weight"),emptyString, + AddChild( new wxEnumProperty(_("Weight"), wxS("Weight"), gs_fp_es_weight_labels,gs_fp_es_weight_values,font.GetWeight()) ); - AddChild( new wxBoolProperty(_("Underlined"),emptyString, + AddChild( new wxBoolProperty(_("Underlined"), wxS("Underlined"), font.GetUnderlined()) ); } @@ -500,21 +512,20 @@ wxFontProperty::~wxFontProperty() { } void wxFontProperty::OnSetValue() { - wxFont& font = wxFontFromVariant(m_value); - wxASSERT(&font); + wxFont font; + font << m_value; - wxFont font2; if ( !font.Ok() ) - font2 = wxFont(10,wxSWISS,wxNORMAL,wxNORMAL); - else - font2 = font; - - m_value = wxFontToVariant(font2); + { + font = wxFont(10,wxSWISS,wxNORMAL,wxNORMAL); + m_value << font; + } } -wxString wxFontProperty::GetValueAsString( int argFlags ) const +wxString wxFontProperty::ValueToString( wxVariant& value, + int argFlags ) const { - return wxPGProperty::GetValueAsString(argFlags); + return wxPGProperty::ValueToString(value, argFlags); } bool wxFontProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* WXUNUSED(primary), @@ -523,10 +534,12 @@ bool wxFontProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* WXUNUSED(prima if ( propgrid->IsMainButtonEvent(event) ) { // Update value from last minute changes - PrepareValueForDialogEditing(propgrid); + wxVariant useValue = propgrid->GetUncommittedPropertyValue(); wxFontData data; - data.SetInitialFont( wxFontFromVariant(m_value) ); + wxFont font; + font << useValue; + data.SetInitialFont( font ); data.SetColour(*wxBLACK); wxFontDialog dlg(propgrid, data); @@ -534,7 +547,8 @@ bool wxFontProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* WXUNUSED(prima { propgrid->EditorsValueWasModified(); - wxVariant variant = wxFontToVariant(dlg.GetFontData().GetChosenFont()); + wxVariant variant; + variant << dlg.GetFontData().GetChosenFont(); SetValueInEvent( variant ); return true; } @@ -545,7 +559,8 @@ bool wxFontProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* WXUNUSED(prima void wxFontProperty::RefreshChildren() { if ( !GetChildCount() ) return; - const wxFont& font = wxFontFromVariant(m_value); + wxFont font; + font << m_value; Item(0)->SetValue( (long)font.GetPointSize() ); Item(1)->SetValue( (long)font.GetFamily() ); Item(2)->SetValueFromString( font.GetFaceName(), wxPG_FULL_VALUE ); @@ -556,7 +571,8 @@ void wxFontProperty::RefreshChildren() void wxFontProperty::ChildChanged( wxVariant& thisValue, int ind, wxVariant& childValue ) const { - wxFont& font = wxFontFromVariant(thisValue); + wxFont font; + font << thisValue; if ( ind == 0 ) { @@ -602,6 +618,8 @@ void wxFontProperty::ChildChanged( wxVariant& thisValue, int ind, wxVariant& chi { font.SetUnderlined( childValue.GetBool() ); } + + thisValue << font; } /* @@ -655,7 +673,7 @@ void wxFontProperty::OnCustomPaint(wxDC& dc, // wxEnumProperty based classes cannot use wxPG_PROP_CLASS_SPECIFIC_1 #define wxPG_PROP_HIDE_CUSTOM_COLOUR wxPG_PROP_CLASS_SPECIFIC_2 -#include +#include "wx/colordlg.h" //#define wx_cp_es_syscolours_len 25 static const wxChar* gs_cp_es_syscolour_labels[] = { @@ -716,7 +734,7 @@ static long gs_cp_es_syscolour_values[] = { }; -WX_PG_IMPLEMENT_WXOBJECT_VARIANT_DATA(wxPGVariantDataColourPropertyValue, wxColourPropertyValue) +IMPLEMENT_VARIANT_OBJECT_EXPORTED_SHALLOWCMP(wxColourPropertyValue, WXDLLIMPEXP_PROPGRID) // Class body is in advprops.h @@ -736,7 +754,7 @@ void wxSystemColourProperty::Init( int type, const wxColour& colour ) m_flags |= wxPG_PROP_STATIC_CHOICES; // Colour selection cannot be changed. - m_value = wxColourPropertyValueToVariant(cpv); + m_value << cpv; OnSetValue(); } @@ -795,20 +813,29 @@ wxColourPropertyValue wxSystemColourProperty::GetVal( const wxVariant* pVariant if ( pVariant->IsNull() ) return wxColourPropertyValue(wxPG_COLOUR_UNSPECIFIED, wxColour()); - wxColourPropertyValue* v1 = &wxColourPropertyValueFromVariant(*pVariant); - if ( v1 ) - return *v1; + if ( pVariant->GetType() == wxS("wxColourPropertyValue") ) + { + wxColourPropertyValue v; + v << *pVariant; + return v; + } - wxColour* pCol = wxGetVariantCast(*pVariant, wxColour); wxColour col; bool variantProcessed = true; - if ( pCol ) + if ( pVariant->GetType() == wxS("wxColour*") ) { + wxColour* pCol = wxStaticCast(pVariant->GetWxObjectPtr(), wxColour); col = *pCol; } - else if ( pVariant->GetType() == wxT("wxArrayInt") ) + else if ( pVariant->GetType() == wxS("wxColour") ) { + col << *pVariant; + } + else if ( pVariant->GetType() == wxArrayInt_VariantType ) + { + // This code is mostly needed for wxPython bindings, which + // may offer tuple of integers as colour value. wxArrayInt arr; arr << *pVariant; @@ -830,10 +857,6 @@ wxColourPropertyValue wxSystemColourProperty::GetVal( const wxVariant* pVariant variantProcessed = false; } } - else if ( pVariant->GetType() == wxT("wxColour") ) - { - col << *pVariant; - } else { variantProcessed = false; @@ -853,7 +876,9 @@ wxColourPropertyValue wxSystemColourProperty::GetVal( const wxVariant* pVariant wxVariant wxSystemColourProperty::DoTranslateVal( wxColourPropertyValue& v ) const { - return wxColourPropertyValueToVariant(v); + wxVariant variant; + variant << v; + return variant; } int wxSystemColourProperty::ColToInd( const wxColour& colour ) const @@ -887,10 +912,9 @@ static inline wxColour wxColourFromPGLong( long col ) void wxSystemColourProperty::OnSetValue() { // Convert from generic wxobject ptr to wxPGVariantDataColour - if ( wxPGIsVariantType(m_value, wxobject) ) + if ( m_value.GetType() == wxS("wxColour*") ) { - wxASSERT( m_value.IsValueKindOf(CLASSINFO(wxColour)) ); - wxColour* pCol = (wxColour*) m_value.GetWxObjectPtr(); + wxColour* pCol = wxStaticCast(m_value.GetWxObjectPtr(), wxColour); m_value << *pCol; } @@ -910,39 +934,46 @@ void wxSystemColourProperty::OnSetValue() m_value = TranslateVal(val); } - wxColourPropertyValue* pCpv = &wxColourPropertyValueFromVariant(m_value); - wxColour col; - if ( pCpv ) - col = pCpv->m_colour; - else - col << m_value; + int ind; - if ( !col.Ok() ) + if ( m_value.GetType() == wxS("wxColourPropertyValue") ) { - SetValueToUnspecified(); - SetIndex(wxNOT_FOUND); - return; - } + wxColourPropertyValue cpv; + cpv << m_value; + wxColour col = cpv.m_colour; - int ind; + if ( !col.Ok() ) + { + SetValueToUnspecified(); + SetIndex(wxNOT_FOUND); + return; + } - if ( pCpv ) - { - if ( pCpv->m_type < wxPG_COLOUR_WEB_BASE ) + if ( cpv.m_type < wxPG_COLOUR_WEB_BASE ) { if ( m_choices.HasValues() ) - ind = GetIndexForValue(pCpv->m_type); + ind = GetIndexForValue(cpv.m_type); else ind = ColToInd(col); } else { - pCpv->m_type = wxPG_COLOUR_CUSTOM; + cpv.m_type = wxPG_COLOUR_CUSTOM; ind = GetCustomColourIndex(); } } else { + wxColour col; + col << m_value; + + if ( !col.Ok() ) + { + SetValueToUnspecified(); + SetIndex(wxNOT_FOUND); + return; + } + ind = ColToInd(col); if ( ind == wxNOT_FOUND ) @@ -969,24 +1000,12 @@ wxString wxSystemColourProperty::ColourToString( const wxColour& col, int index return m_choices.GetLabel(index); } -wxString wxSystemColourProperty::GetValueAsString( int argFlags ) const +wxString wxSystemColourProperty::ValueToString( wxVariant& value, + int WXUNUSED(argFlags) ) const { - wxColourPropertyValue val = GetVal(); - - int ind = GetIndex(); + wxColourPropertyValue val = GetVal(&value); - // Always show custom colour for textctrl-editor - if ( val.m_type == wxPG_COLOUR_CUSTOM || - ind == GetCustomColourIndex() || - (argFlags & wxPG_PROPERTY_SPECIFIC) ) - { - return ColourToString(val.m_colour, wxNOT_FOUND); - } - - if ( ind == -1 ) - return wxEmptyString; - - return ColourToString(val.m_colour, ind); + return ColourToString(val.m_colour, m_choices.Index(val.m_type)); } @@ -1004,7 +1023,7 @@ int wxSystemColourProperty::GetCustomColourIndex() const bool wxSystemColourProperty::QueryColourFromUser( wxVariant& variant ) const { - wxASSERT( m_value.GetType() != wxT("string") ); + wxASSERT( m_value.GetType() != wxPG_VARIANT_TYPE_STRING ); bool res = false; wxPropertyGrid* propgrid = GetGrid(); @@ -1328,11 +1347,68 @@ static unsigned long gs_cp_es_normcolour_colours[] = { wxPG_COLOUR(0,0,0) }; -WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR2(wxColourProperty, - gs_cp_es_normcolour_labels, - (const long*)NULL, - gs_cp_es_normcolour_colours, - TextCtrlAndButton) +WX_PG_IMPLEMENT_PROPERTY_CLASS(wxColourProperty, wxSystemColourProperty, + wxColour, const wxColour&, TextCtrlAndButton) + +static wxPGChoices gs_wxColourProperty_choicesCache; + +wxColourProperty::wxColourProperty( const wxString& label, + const wxString& name, + const wxColour& value ) + : wxSystemColourProperty(label, name, gs_cp_es_normcolour_labels, + NULL, + &gs_wxColourProperty_choicesCache, value ) +{ + Init( value ); + + m_flags |= wxPG_PROP_TRANSLATE_CUSTOM; +} + +wxColourProperty::~wxColourProperty() +{ +} + +void wxColourProperty::Init( wxColour colour ) +{ + if ( !colour.Ok() ) + colour = *wxWHITE; + wxVariant variant; + variant << colour; + m_value = variant; + int ind = ColToInd(colour); + if ( ind < 0 ) + ind = m_choices.GetCount() - 1; + SetIndex( ind ); +} + +wxString wxColourProperty::ValueToString( wxVariant& value, + int argFlags ) const +{ + const wxPGEditor* editor = GetEditorClass(); + if ( editor != wxPGEditor_Choice && + editor != wxPGEditor_ChoiceAndButton && + editor != wxPGEditor_ComboBox ) + argFlags |= wxPG_PROPERTY_SPECIFIC; + + return wxSystemColourProperty::ValueToString(value, argFlags); +} + +wxColour wxColourProperty::GetColour( int index ) const +{ + if ( !m_choices.HasValue(index) ) + { + wxASSERT( index < (int)GetItemCount() ); + return gs_cp_es_normcolour_colours[index]; + } + return gs_cp_es_normcolour_colours[m_choices.GetValue(index)]; +} + +wxVariant wxColourProperty::DoTranslateVal( wxColourPropertyValue& v ) const +{ + wxVariant variant; + variant << v.m_colour; + return variant; +} // ----------------------------------------------------------------------- // wxCursorProperty @@ -1449,13 +1525,14 @@ void wxCursorProperty::OnCustomPaint( wxDC& dc, if ( paintdata.m_choiceItem < NUM_CURSORS ) { - int cursorindex = gs_cp_es_syscursors_values[paintdata.m_choiceItem]; + wxStockCursor cursorIndex = + (wxStockCursor) gs_cp_es_syscursors_values[paintdata.m_choiceItem]; { - if ( cursorindex == wxCURSOR_NONE ) - cursorindex = wxCURSOR_ARROW; + if ( cursorIndex == wxCURSOR_NONE ) + cursorIndex = wxCURSOR_ARROW; - wxCursor cursor( cursorindex ); + wxCursor cursor( cursorIndex ); #ifdef __WXMSW__ HDC hDc = (HDC)((const wxMSWDCImpl *)dc.GetImpl())->GetHDC(); @@ -1528,9 +1605,7 @@ const wxString& wxPGGetDefaultImageWildcard() return wxPGGlobalVars->m_pDefaultImageWildcard; } -WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(wxImageFileProperty, - wxFileProperty, - const wxString&) +IMPLEMENT_DYNAMIC_CLASS(wxImageFileProperty, wxFileProperty) wxImageFileProperty::wxImageFileProperty( const wxString& label, const wxString& name, const wxString& value ) @@ -1566,10 +1641,12 @@ void wxImageFileProperty::OnSetValue() m_pBitmap = NULL; } + wxFileName filename = GetFileName(); + // Create the image thumbnail - if ( m_filename.FileExists() ) + if ( filename.FileExists() ) { - m_pImage = new wxImage( m_filename.GetFullPath() ); + m_pImage = new wxImage( filename.GetFullPath() ); } } @@ -1613,7 +1690,7 @@ void wxImageFileProperty::OnCustomPaint( wxDC& dc, #if wxUSE_CHOICEDLG -#include +#include "wx/choicdlg.h" WX_PG_IMPLEMENT_PROPERTY_CLASS(wxMultiChoiceProperty,wxPGProperty, wxArrayInt,const wxArrayInt&,TextCtrlAndButton) @@ -1654,22 +1731,30 @@ wxMultiChoiceProperty::~wxMultiChoiceProperty() void wxMultiChoiceProperty::OnSetValue() { - GenerateValueAsString(); + GenerateValueAsString(m_value, &m_display); } -wxString wxMultiChoiceProperty::GetValueAsString( int ) const +wxString wxMultiChoiceProperty::ValueToString( wxVariant& value, + int argFlags ) const { - return m_display; + // If possible, use cached string + if ( argFlags & wxPG_VALUE_IS_CURRENT ) + return m_display; + + wxString s; + GenerateValueAsString(value, &s); + return s; } -void wxMultiChoiceProperty::GenerateValueAsString() +void wxMultiChoiceProperty::GenerateValueAsString( wxVariant& value, + wxString* target ) const { wxArrayString strings; - if ( wxPGIsVariantType(m_value, arrstring) ) - strings = m_value.GetArrayString(); + if ( value.GetType() == wxPG_VARIANT_TYPE_ARRSTRING ) + strings = value.GetArrayString(); - wxString& tempStr = m_display; + wxString& tempStr = *target; unsigned int i; unsigned int itemCount = strings.size(); @@ -1689,7 +1774,7 @@ void wxMultiChoiceProperty::GenerateValueAsString() wxArrayInt wxMultiChoiceProperty::GetValueAsIndices() const { - const wxArrayInt& valueArr = wxArrayIntFromVariant(GetValue()); + const wxArrayInt& valueArr = wxArrayIntRefFromVariant(GetValue()); unsigned int i; // Translate values to string indices. @@ -1720,7 +1805,7 @@ bool wxMultiChoiceProperty::OnEvent( wxPropertyGrid* propgrid, if ( propgrid->IsMainButtonEvent(event) ) { // Update the value - PrepareValueForDialogEditing(propgrid); + wxVariant useValue = propgrid->GetUncommittedPropertyValue(); wxArrayString labels = m_choices.GetLabels(); unsigned int choiceCount; @@ -1740,7 +1825,7 @@ bool wxMultiChoiceProperty::OnEvent( wxPropertyGrid* propgrid, dlg.Move( propgrid->GetGoodEditorDialogPosition(this,dlg.GetSize()) ); - wxArrayString strings = m_value.GetArrayString(); + wxArrayString strings = useValue.GetArrayString(); wxArrayString extraStrings; dlg.SetSelections(m_choices.GetIndicesForStrings(strings, &extraStrings)); @@ -1785,13 +1870,6 @@ bool wxMultiChoiceProperty::OnEvent( wxPropertyGrid* propgrid, return false; } -int wxMultiChoiceProperty::GetChoiceInfo( wxPGChoiceInfo* choiceinfo ) -{ - if ( choiceinfo ) - choiceinfo->m_choices = &m_choices; - return -1; -} - bool wxMultiChoiceProperty::StringToValue( wxVariant& variant, const wxString& text, int ) const { wxArrayString arr; @@ -1873,11 +1951,12 @@ bool wxDateProperty::StringToValue( wxVariant& variant, const wxString& text, return false; } -wxString wxDateProperty::GetValueAsString( int argFlags ) const +wxString wxDateProperty::ValueToString( wxVariant& value, + int argFlags ) const { const wxChar* format = (const wxChar*) NULL; - wxDateTime dateTime = m_value.GetDateTime(); + wxDateTime dateTime = value.GetDateTime(); if ( !dateTime.IsValid() ) return wxT("Invalid"); @@ -1980,6 +2059,10 @@ void wxPropertyGridInterface::InitAllTypeHandlers() void wxPropertyGridInterface::RegisterAdditionalEditors() { + // Register editor classes, if necessary. + if ( wxPGGlobalVars->m_mapEditorClasses.empty() ) + wxPropertyGrid::RegisterDefaultEditors(); + #if wxUSE_SPINBTN wxPGRegisterEditorClass(SpinCtrl); #endif @@ -1990,4 +2073,7 @@ void wxPropertyGridInterface::RegisterAdditionalEditors() // ----------------------------------------------------------------------- -#endif // wxPG_INCLUDE_ADVPROPS +#endif // wxPG_INCLUDE_ADVPROPS + +#endif // wxUSE_PROPGRID +