Allow wxPGMultiButton to work even if primary editor control was not created in wxPGEditor::CreateControls(); Clarified related samples and documentation.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59450 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2009-03-09 18:32:43 +00:00
parent 0b108d1006
commit 6086bcc8ba
4 changed files with 24 additions and 19 deletions

View File

@@ -534,6 +534,8 @@ public:
protected: protected:
void DoAddButton( wxWindow* button, const wxSize& sz );
int GenId( int id ) const; int GenId( int id ) const;
wxArrayPtrVoid m_buttons; wxArrayPtrVoid m_buttons;

View File

@@ -220,18 +220,19 @@ public:
if ( event.GetId() == buttons->GetButtonId(0) ) if ( event.GetId() == buttons->GetButtonId(0) )
{ {
// Do something when first button is pressed // Do something when the first button is pressed
return true; // Return true if the action modified the value in editor.
...
} }
if ( event.GetId() == buttons->GetButtonId(1) ) if ( event.GetId() == buttons->GetButtonId(1) )
{ {
// Do something when second button is pressed // Do something when the second button is pressed
return true; ...
} }
if ( event.GetId() == buttons->GetButtonId(2) ) if ( event.GetId() == buttons->GetButtonId(2) )
{ {
// Do something when third button is pressed // Do something when the third button is pressed
return true; ...
} }
} }
return wxPGTextCtrlEditor::OnEvent(propGrid, property, ctrl, event); return wxPGTextCtrlEditor::OnEvent(propGrid, property, ctrl, event);

View File

@@ -134,21 +134,21 @@ bool wxSampleMultiButtonEditor::OnEvent( wxPropertyGrid* propGrid,
if ( event.GetId() == buttons->GetButtonId(0) ) if ( event.GetId() == buttons->GetButtonId(0) )
{ {
// Do something when first button is pressed // Do something when the first button is pressed
wxLogDebug("First button pressed"); wxLogDebug("First button pressed");
return true; return false; // Return false since value did not change
} }
if ( event.GetId() == buttons->GetButtonId(1) ) if ( event.GetId() == buttons->GetButtonId(1) )
{ {
// Do something when second button is pressed // Do something when the second button is pressed
wxLogDebug("Second button pressed"); wxMessageBox("Second button pressed");
return true; return false; // Return false since value did not change
} }
if ( event.GetId() == buttons->GetButtonId(2) ) if ( event.GetId() == buttons->GetButtonId(2) )
{ {
// Do something when third button is pressed // Do something when the third button is pressed
wxLogDebug("Third button pressed"); wxMessageBox("Third button pressed");
return true; return false; // Return false since value did not change
} }
} }
return wxPGTextCtrlEditor::OnEvent(propGrid, property, ctrl, event); return wxPGTextCtrlEditor::OnEvent(propGrid, property, ctrl, event);

View File

@@ -2842,10 +2842,10 @@ void wxPropertyGrid::HandleCustomEditorEvent( wxEvent &event )
wxVariant pendingValue(selected->GetValueRef()); wxVariant pendingValue(selected->GetValueRef());
wxWindow* wnd = GetEditorControl(); wxWindow* wnd = GetEditorControl();
wxWindow* editorWnd = wxDynamicCast(event.GetEventObject(), wxWindow);
int selFlags = 0; int selFlags = 0;
bool wasUnspecified = selected->IsValueUnspecified(); bool wasUnspecified = selected->IsValueUnspecified();
int usesAutoUnspecified = selected->UsesAutoUnspecified(); int usesAutoUnspecified = selected->UsesAutoUnspecified();
bool valueIsPending = false; bool valueIsPending = false;
m_chgInfo_changedProperty = NULL; m_chgInfo_changedProperty = NULL;
@@ -2891,17 +2891,19 @@ void wxPropertyGrid::HandleCustomEditorEvent( wxEvent &event )
if ( !buttonWasHandled ) if ( !buttonWasHandled )
{ {
if ( wnd ) if ( wnd || m_wndEditor2 )
{ {
// First call editor class' event handler. // First call editor class' event handler.
const wxPGEditor* editor = selected->GetEditorClass(); const wxPGEditor* editor = selected->GetEditorClass();
if ( editor->OnEvent( this, selected, wnd, event ) ) if ( editor->OnEvent( this, selected, editorWnd, event ) )
{ {
// If changes, validate them // If changes, validate them
if ( DoEditorValidate() ) if ( DoEditorValidate() )
{ {
if ( editor->GetValueFromControl( pendingValue, m_selected, wnd ) ) if ( editor->GetValueFromControl( pendingValue,
m_selected,
wnd ) )
valueIsPending = true; valueIsPending = true;
} }
else else
@@ -2914,7 +2916,7 @@ void wxPropertyGrid::HandleCustomEditorEvent( wxEvent &event )
// Then the property's custom handler (must be always called, unless // Then the property's custom handler (must be always called, unless
// validation failed). // validation failed).
if ( !validationFailure ) if ( !validationFailure )
buttonWasHandled = selected->OnEvent( this, wnd, event ); buttonWasHandled = selected->OnEvent( this, editorWnd, event );
} }
// SetValueInEvent(), as called in one of the functions referred above // SetValueInEvent(), as called in one of the functions referred above