*/
virtual wxPGEditorDialogAdapter* GetEditorDialog() const;
+ /**
+ Called whenever validation has failed with given pending value.
+
+ @remarks If you implement this in your custom property class, please
+ remember to call the baser implementation as well, since they
+ may use it to revert property into pre-change state.
+ */
+ virtual void OnValidationFailure( wxVariant& pendingValue );
+
/** Append a new choice to property's list of choices.
*/
int AddChoice( const wxString& label, int value = wxPG_INVALID_VALUE )
To add your own validation failure behavior, override
wxPropertyGrid::DoOnValidationFailure().
*/
- bool OnValidationFailure( wxPGProperty* property, wxVariant& invalidValue )
- {
- bool res = DoOnValidationFailure(property, invalidValue);
- property->SetFlag(wxPG_PROP_INVALID_VALUE);
- return res;
- }
+ bool OnValidationFailure( wxPGProperty* property,
+ wxVariant& invalidValue );
/** Called to indicate property and editor has valid value now.
*/
// this take advantage of it.
virtual int GetChoiceSelection() const { return m_index; }
+ virtual void OnValidationFailure( wxVariant& pendingValue );
+
protected:
int GetIndex() const;
// Relies on ValidateValue being called always before OnSetValue
static int ms_nextIndex;
+ static int ms_prevIndex;
};
// -----------------------------------------------------------------------
*/
virtual wxPGEditorDialogAdapter* GetEditorDialog() const;
+ /**
+ Called whenever validation has failed with given pending value.
+
+ @remarks If you implement this in your custom property class, please
+ remember to call the baser implementation as well, since they
+ may use it to revert property into pre-change state.
+ */
+ virtual void OnValidationFailure( wxVariant& pendingValue );
+
/**
Append a new choice to property's list of choices.
{
}
+void wxPGProperty::OnValidationFailure( wxVariant& WXUNUSED(pendingValue) )
+{
+}
+
void wxPGProperty::GetDisplayInfo( unsigned int column,
int choiceIndex,
int flags,
// -----------------------------------------------------------------------
+bool wxPropertyGrid::OnValidationFailure( wxPGProperty* property,
+ wxVariant& invalidValue )
+{
+ wxWindow* editor = GetEditorControl();
+
+ // First call property's handler
+ property->OnValidationFailure(invalidValue);
+
+ bool res = DoOnValidationFailure(property, invalidValue);
+
+ //
+ // For non-wxTextCtrl editors, we do need to revert the value
+ if ( !editor->IsKindOf(CLASSINFO(wxTextCtrl)) &&
+ property == m_selected )
+ {
+ property->GetEditorClass()->UpdateControl(property, editor);
+ }
+
+ property->SetFlag(wxPG_PROP_INVALID_VALUE);
+
+ return res;
+}
+
bool wxPropertyGrid::DoOnValidationFailure( wxPGProperty* property, wxVariant& WXUNUSED(invalidValue) )
{
int vfb = m_validationInfo.m_failureBehavior;
}
int wxEnumProperty::ms_nextIndex = -2;
+int wxEnumProperty::ms_prevIndex = -1;
void wxEnumProperty::OnSetValue()
{
return false;
}
+void
+wxEnumProperty::OnValidationFailure( wxVariant& WXUNUSED(pendingValue) )
+{
+ // Revert index
+ m_index = ms_prevIndex;
+ ResetNextIndex();
+}
+
void wxEnumProperty::SetIndex( int index )
{
+ ms_prevIndex = m_index;
ms_nextIndex = -2;
m_index = index;
}