Fix querying the value of wxEnumProperty in wxPropertyGridEditor.

Doing this changed the internal state of the control and resulted in the
choice not being updated.

Fix this by using wxPG_PROPERTY_SPECIFIC.

Closes #15449.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76557 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2014-05-17 12:29:26 +00:00
parent 268b33d8a3
commit d94e807cfc
2 changed files with 11 additions and 6 deletions

View File

@ -1168,7 +1168,7 @@ bool wxPGChoiceEditor::GetValueFromControl( wxVariant& variant, wxPGProperty* pr
property->IsValueUnspecified() property->IsValueUnspecified()
) )
{ {
return property->IntToValue( variant, index, 0 ); return property->IntToValue(variant, index, wxPG_PROPERTY_SPECIFIC);
} }
return false; return false;
} }
@ -1691,7 +1691,7 @@ bool wxPGCheckBoxEditor::GetValueFromControl( wxVariant& variant, wxPGProperty*
property->IsValueUnspecified() property->IsValueUnspecified()
) )
{ {
return property->IntToValue(variant, index, 0); return property->IntToValue(variant, index, wxPG_PROPERTY_SPECIFIC);
} }
return false; return false;
} }

View File

@ -1305,22 +1305,27 @@ bool wxEnumProperty::ValueFromInt_( wxVariant& variant, int intVal, int argFlags
{ {
// If wxPG_FULL_VALUE is *not* in argFlags, then intVal is index from combo box. // If wxPG_FULL_VALUE is *not* in argFlags, then intVal is index from combo box.
// //
ms_nextIndex = -2; int setAsNextIndex = -2;
if ( argFlags & wxPG_FULL_VALUE ) if ( argFlags & wxPG_FULL_VALUE )
{ {
ms_nextIndex = GetIndexForValue( intVal ); setAsNextIndex = GetIndexForValue( intVal );
} }
else else
{ {
if ( intVal != GetIndex() ) if ( intVal != GetIndex() )
{ {
ms_nextIndex = intVal; setAsNextIndex = intVal;
} }
} }
if ( ms_nextIndex != -2 ) if ( setAsNextIndex != -2 )
{ {
// If wxPG_PROPERTY_SPECIFIC is set, then this is done for
// validation or fetching a data purposes only, and index must not be changed.
if ( !(argFlags & wxPG_PROPERTY_SPECIFIC) )
ms_nextIndex = setAsNextIndex;
if ( !(argFlags & wxPG_FULL_VALUE) ) if ( !(argFlags & wxPG_FULL_VALUE) )
intVal = m_choices.GetValue(intVal); intVal = m_choices.GetValue(intVal);