From 7a344f1be4ff59b7b150ab52265693d4219de973 Mon Sep 17 00:00:00 2001 From: Jaakko Salli Date: Sat, 27 Sep 2008 14:03:10 +0000 Subject: [PATCH] Fixed wxPGMultiButton (event handling, FinalizePosition() -> Finalize(), no longer using PG specific class macros in its sample), other editors.h interface fixes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55915 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/propgrid/editors.h | 117 +----------------- include/wx/propgrid/propgrid.h | 1 - interface/wx/propgrid/editors.h | 209 ++++++++++++++++++++------------ samples/propgrid/propgrid.cpp | 40 +++--- src/propgrid/editors.cpp | 13 ++ src/propgrid/propgrid.cpp | 10 +- 6 files changed, 177 insertions(+), 213 deletions(-) diff --git a/include/wx/propgrid/editors.h b/include/wx/propgrid/editors.h index 7a6a1e3e2b..1058989c47 100644 --- a/include/wx/propgrid/editors.h +++ b/include/wx/propgrid/editors.h @@ -417,7 +417,7 @@ public: if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \ { \ wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \ - wxPGConstruct##EDITOR##EditorClass(), wxS(#EDITOR) ); \ + wxPGConstruct##EDITOR##EditorClass() ); \ } // Use this in RegisterDefaultEditors. @@ -425,7 +425,7 @@ public: if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \ { \ wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \ - wxPGConstruct##EDITOR##EditorClass(), wxS(#EDITOR), true ); \ + wxPGConstruct##EDITOR##EditorClass(), true ); \ } #define wxPG_INIT_REQUIRED_EDITOR(T) \ @@ -493,113 +493,7 @@ private: This class can be used to have multiple buttons in a property editor. You will need to create a new property editor class, override CreateControls, and have it return wxPGMultiButton instance in - wxPGWindowList::SetSecondary(). For instance, here we add three buttons to - a textctrl editor: - - @code - - #include - - class wxMultiButtonTextCtrlEditor : public wxPGTextCtrlEditor - { - WX_PG_DECLARE_EDITOR_CLASS(wxMultiButtonTextCtrlEditor) - public: - wxMultiButtonTextCtrlEditor() {} - virtual ~wxMultiButtonTextCtrlEditor() {} - - wxPG_DECLARE_CREATECONTROLS - virtual bool OnEvent( wxPropertyGrid* propGrid, - wxPGProperty* property, - wxWindow* ctrl, - wxEvent& event ) const; - - }; - - WX_PG_IMPLEMENT_EDITOR_CLASS(MultiButtonTextCtrlEditor, - wxMultiButtonTextCtrlEditor, - wxPGTextCtrlEditor) - - wxPGWindowList - wxMultiButtonTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid, - wxPGProperty* property, - const wxPoint& pos, - const wxSize& sz ) const - { - // Create and populate buttons-subwindow - wxPGMultiButton* buttons = new wxPGMultiButton( propGrid, sz ); - - // Add two regular buttons - buttons->Add( "..." ); - buttons->Add( "A" ); - // Add a bitmap button - buttons->Add( wxArtProvider::GetBitmap(wxART_FOLDER) ); - - // Create the 'primary' editor control (textctrl in this case) - wxPGWindowList wndList = wxPGTextCtrlEditor::CreateControls( - propGrid, - property, - pos, - buttons->GetPrimarySize() - ); - - // Finally, move buttons-subwindow to correct position and make sure - // returned wxPGWindowList contains our custom button list. - buttons->FinalizePosition(pos); - - wndList.SetSecondary( buttons ); - return wndList; - } - - bool wxMultiButtonTextCtrlEditor::OnEvent( wxPropertyGrid* propGrid, - wxPGProperty* property, - wxWindow* ctrl, - wxEvent& event ) const - { - if ( event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED ) - { - wxPGMultiButton* buttons = (wxPGMultiButton*) - propGrid->GetEditorControlSecondary(); - - if ( event.GetId() == buttons->GetButtonId(0) ) - { - // Do something when first button is pressed - return true; - } - if ( event.GetId() == buttons->GetButtonId(1) ) - { - // Do something when first button is pressed - return true; - } - if ( event.GetId() == buttons->GetButtonId(2) ) - { - // Do something when second button is pressed - return true; - } - } - return wxPGTextCtrlEditor::OnEvent(propGrid, property, ctrl, event); - } - - @endcode - - Further to use this editor, code like this can be used: - - @code - - // Register editor class - needs only to be called once - wxPGRegisterEditorClass( MultiButtonTextCtrlEditor ); - - // Insert the property that will have multiple buttons - propGrid->Append( new wxLongStringProperty("MultipleButtons", - wxPG_LABEL) ); - - // Change property to use editor created in the previous code segment - propGrid->SetPropertyEditor( "MultipleButtons", - wxPG_EDITOR(MultiButtonTextCtrlEditor) ); - - @endcode - - @library{wxpropgrid} - @category{propgrid} + wxPGWindowList::SetSecondary(). */ class WXDLLIMPEXP_PROPGRID wxPGMultiButton : public wxWindow { @@ -628,10 +522,7 @@ public: return wxSize(m_fullEditorSize.x - m_buttonsWidth, m_fullEditorSize.y); } - void FinalizePosition( const wxPoint& pos ) - { - Move( pos.x + m_fullEditorSize.x - m_buttonsWidth, pos.y ); - } + void Finalize( wxPropertyGrid* propGrid, const wxPoint& pos ); #ifndef DOXYGEN protected: diff --git a/include/wx/propgrid/propgrid.h b/include/wx/propgrid/propgrid.h index 23fe4b1f1b..65ab06c805 100644 --- a/include/wx/propgrid/propgrid.h +++ b/include/wx/propgrid/propgrid.h @@ -883,7 +883,6 @@ public: Pointer to the editor class instance that should be used. */ static wxPGEditor* RegisterEditorClass( wxPGEditor* editor, - const wxString& name, bool noDefCheck = false ); #endif diff --git a/interface/wx/propgrid/editors.h b/interface/wx/propgrid/editors.h index 693112e573..e0c8555ede 100644 --- a/interface/wx/propgrid/editors.h +++ b/interface/wx/propgrid/editors.h @@ -8,20 +8,22 @@ // ----------------------------------------------------------------------- -/** @class wxPGEditor +/** + @class wxPGEditor Base class for custom wxPropertyGrid editors. @remarks - - Names of builtin property editors are: TextCtrl, Choice, - ComboBox, CheckBox, TextCtrlAndButton, and ChoiceAndButton. Additional editors - include SpinCtrl and DatePickerCtrl, but using them requires calling - wxPropertyGrid::RegisterAdditionalEditors() prior use. + - Names of built-in property editors are: TextCtrl, Choice, + ComboBox, CheckBox, TextCtrlAndButton, and ChoiceAndButton. Additional + editors include SpinCtrl and DatePickerCtrl, but using them requires + calling wxPropertyGrid::RegisterAdditionalEditors() prior use. - - Pointer to builtin editor is available as wxPGEditor_EditorName + - Pointer to built-in editor is available as wxPGEditor_EditorName (eg. wxPGEditor_TextCtrl). - - To add new editor you need to register it first using static function + - Before you start using new editor you just created, you need to register + it using static function wxPropertyGrid::RegisterEditorClass(), with code like this: @code wxPGEditor* editorPointer = wxPropertyGrid::RegisterEditorClass(new MyEditorClass(), "MyEditor"); @@ -47,20 +49,26 @@ public: /** Destructor. */ virtual ~wxPGEditor(); - /** Returns pointer to the name of the editor. For example, wxPG_EDITOR(TextCtrl) - has name "TextCtrl". This method is autogenerated for custom editors. + /** + Returns pointer to the name of the editor. For example, + wxPGEditor_TextCtrl has name "TextCtrl". */ virtual wxString GetName() const = 0; - /** Instantiates editor controls. + /** + Instantiates editor controls. + @param propgrid - wxPropertyGrid to which the property belongs (use as parent for control). + wxPropertyGrid to which the property belongs (use as parent for control). + @param property - Property for which this method is called. + Property for which this method is called. + @param pos - Position, inside wxPropertyGrid, to create control(s) to. + Position, inside wxPropertyGrid, to create control(s) to. + @param size - Initial size for control(s). + Initial size for control(s). @remarks - Primary control shall use id wxPG_SUBID1, and secondary (button) control @@ -76,98 +84,113 @@ public: OnCustomEditorEvent will then forward events, first to wxPGEditor::OnEvent() and then to wxPGProperty::OnEvent(). */ - virtual wxPGWindowList CreateControls( wxPropertyGrid* propgrid, wxPGProperty* property, - const wxPoint& pos, const wxSize& size ) const = 0; + virtual wxPGWindowList CreateControls( wxPropertyGrid* propgrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& size ) const = 0; /** Loads value from property to the control. */ virtual void UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const = 0; - /** Draws value for given property. + /** + Draws value for given property. */ - virtual void DrawValue( wxDC& dc, const wxRect& rect, wxPGProperty* property, const wxString& text ) const; + virtual void DrawValue( wxDC& dc, const wxRect& rect, + wxPGProperty* property, const wxString& text ) const; - /** Handles events. Returns true if value in control was modified - (see wxPGProperty::OnEvent for more information). + /** + Handles events. Returns @true if value in control was modified + (see wxPGProperty::OnEvent() for more information). */ virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property, wxWindow* wnd_primary, wxEvent& event ) const = 0; - /** Returns value from control, via parameter 'variant'. - Usually ends up calling property's StringToValue or IntToValue. - Returns true if value was different. + /** + Returns value from control, via parameter 'variant'. + Usually ends up calling property's StringToValue() or IntToValue(). + Returns @true if value was different. */ - virtual bool GetValueFromControl( wxVariant& variant, wxPGProperty* property, wxWindow* ctrl ) const; + virtual bool GetValueFromControl( wxVariant& variant, wxPGProperty* property, + wxWindow* ctrl ) const; /** Sets value in control to unspecified. */ - virtual void SetValueToUnspecified( wxPGProperty* property, wxWindow* ctrl ) const = 0; + virtual void SetValueToUnspecified( wxPGProperty* property, + wxWindow* ctrl ) const = 0; /** Sets control's value specifically from string. */ - virtual void SetControlStringValue( wxPGProperty* property, wxWindow* ctrl, const wxString& txt ) const; + virtual void SetControlStringValue( wxPGProperty* property, + wxWindow* ctrl, const wxString& txt ) const; /** Sets control's value specifically from int (applies to choice etc.). */ - virtual void SetControlIntValue( wxPGProperty* property, wxWindow* ctrl, int value ) const; + virtual void SetControlIntValue( wxPGProperty* property, + wxWindow* ctrl, int value ) const; - /** Inserts item to existing control. Index -1 means appending. + /** + Inserts item to existing control. Index -1 means end of list. Default implementation does nothing. Returns index of item added. */ - virtual int InsertItem( wxWindow* ctrl, const wxString& label, int index ) const; + virtual int InsertItem( wxWindow* ctrl, const wxString& label, + int index ) const; - /** Deletes item from existing control. + /** + Deletes item from existing control. Default implementation does nothing. */ virtual void DeleteItem( wxWindow* ctrl, int index ) const; - /** Extra processing when control gains focus. For example, wxTextCtrl + /** + Extra processing when control gains focus. For example, wxTextCtrl based controls should select all text. */ virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const; - /** Returns true if control itself can contain the custom image. Default is - to return false. + /** + Returns @true if control itself can contain the custom image. Default + implementation returns @false. */ virtual bool CanContainCustomImage() const; - - // - // This member is public so scripting language bindings - // wrapper code can access it freely. - void* m_clientData; }; // ----------------------------------------------------------------------- -/** @class wxPGMultiButton +/** + @class wxPGMultiButton This class can be used to have multiple buttons in a property editor. You will need to create a new property editor class, override CreateControls, and have it return wxPGMultiButton instance in wxPGWindowList::SetSecondary(). - For instance, here we add three buttons to a textctrl editor: + + For instance, here we add three buttons to a TextCtrl editor: @code #include - class wxMultiButtonTextCtrlEditor : public wxPGTextCtrlEditor + class wxSampleMultiButtonEditor : public wxPGTextCtrlEditor { - WX_PG_DECLARE_EDITOR_CLASS(wxMultiButtonTextCtrlEditor) + DECLARE_DYNAMIC_CLASS(wxSampleMultiButtonEditor) public: - wxMultiButtonTextCtrlEditor() {} - virtual ~wxMultiButtonTextCtrlEditor() {} + wxSampleMultiButtonEditor() {} + virtual ~wxSampleMultiButtonEditor() {} + + virtual wxString GetName() const { return "SampleMultiButtonEditor"; } - wxPG_DECLARE_CREATECONTROLS + virtual wxPGWindowList CreateControls( wxPropertyGrid* propGrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& sz ) const; virtual bool OnEvent( wxPropertyGrid* propGrid, wxPGProperty* property, wxWindow* ctrl, wxEvent& event ) const; - }; - WX_PG_IMPLEMENT_EDITOR_CLASS(MultiButtonTextCtrlEditor, wxMultiButtonTextCtrlEditor, - wxPGTextCtrlEditor) + IMPLEMENT_DYNAMIC_CLASS(wxSampleMultiButtonEditor, wxPGTextCtrlEditor) - wxPGWindowList wxMultiButtonTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid, - wxPGProperty* property, - const wxPoint& pos, - const wxSize& sz ) const + wxPGWindowList wxSampleMultiButtonEditor::CreateControls( wxPropertyGrid* propGrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& sz ) const { // Create and populate buttons-subwindow wxPGMultiButton* buttons = new wxPGMultiButton( propGrid, sz ); @@ -180,20 +203,21 @@ public: // Create the 'primary' editor control (textctrl in this case) wxPGWindowList wndList = wxPGTextCtrlEditor::CreateControls - ( propGrid, property, pos, buttons->GetPrimarySize() ); + ( propGrid, property, pos, + buttons->GetPrimarySize() ); // Finally, move buttons-subwindow to correct position and make sure // returned wxPGWindowList contains our custom button list. - buttons->FinalizePosition(pos); + buttons->Finalize(propGrid, pos); wndList.SetSecondary( buttons ); return wndList; } - bool wxMultiButtonTextCtrlEditor::OnEvent( wxPropertyGrid* propGrid, - wxPGProperty* property, - wxWindow* ctrl, - wxEvent& event ) const + bool wxSampleMultiButtonEditor::OnEvent( wxPropertyGrid* propGrid, + wxPGProperty* property, + wxWindow* ctrl, + wxEvent& event ) const { if ( event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED ) { @@ -206,12 +230,12 @@ public: } if ( event.GetId() == buttons->GetButtonId(1) ) { - // Do something when first button is pressed + // Do something when second button is pressed return true; } if ( event.GetId() == buttons->GetButtonId(2) ) { - // Do something when second button is pressed + // Do something when third button is pressed return true; } } @@ -225,13 +249,14 @@ public: @code // Register editor class - needs only to be called once - wxPGRegisterEditorClass( MultiButtonTextCtrlEditor ); + wxPGEditor* multiButtonEditor = new wxSampleMultiButtonEditor(); + wxPropertyGrid::RegisterEditorClass( multiButtonEditor ); // Insert the property that will have multiple buttons propGrid->Append( new wxLongStringProperty("MultipleButtons", wxPG_LABEL) ); // Change property to use editor created in the previous code segment - propGrid->SetPropertyEditor( "MultipleButtons", wxPG_EDITOR(MultiButtonTextCtrlEditor) ); + propGrid->SetPropertyEditor( "MultipleButtons", multiButtonEditor ); @endcode @@ -242,35 +267,59 @@ class WXDLLIMPEXP_PROPGRID wxPGMultiButton : public wxWindow { public: + /** + Constructor. + */ wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz ); + /** + Destructor. + */ virtual ~wxPGMultiButton() { } - wxWindow* GetButton( unsigned int i ) { return (wxWindow*) m_buttons[i]; } - const wxWindow* GetButton( unsigned int i ) const { return (const wxWindow*) m_buttons[i]; } + /** + Adds new button, with given label. + */ + void Add( const wxString& label, int id = -2 ); - /** Utility function to be used in event handlers. + /** + Adds new bitmap button. */ - int GetButtonId( unsigned int i ) const { return GetButton(i)->GetId(); } + void Add( const wxBitmap& bitmap, int id = -2 ); + + /** + Call this in CreateControls() of your custom editor class + after all buttons have been added. - /** Returns number of buttons. + @param propGrid + wxPropertyGrid given in CreateControls(). + + @param pos + wxPoint given in CreateControls(). */ - int GetCount() const { return m_buttons.Count(); } + void Finalize( wxPropertyGrid* propGrid, const wxPoint& pos ); - void Add( const wxString& label, int id = -2 ); - void Add( const wxBitmap& bitmap, int id = -2 ); + /** + Returns pointer to one of the buttons. + */ + wxWindow* GetButton( unsigned int i ); - wxSize GetPrimarySize() const - { - return wxSize(m_fullEditorSize.x - m_buttonsWidth, m_fullEditorSize.y); - } + /** + Returns Id of one of the buttons. This is utility function to be + used in event handlers. + */ + int GetButtonId( unsigned int i ) const; - void FinalizePosition( const wxPoint& pos ) - { - Move( pos.x + m_fullEditorSize.x - m_buttonsWidth, pos.y ); - } + /** + Returns number of buttons. + */ + int GetCount(); + + /** + Returns size of primary editor control, as appropriately + reduced by number of buttons present. + */ + wxSize GetPrimarySize() const; }; // ----------------------------------------------------------------------- - -#endif // _WX_PROPGRID_EDITORS_H_ diff --git a/samples/propgrid/propgrid.cpp b/samples/propgrid/propgrid.cpp index ceeb0748c6..55eb7706a5 100644 --- a/samples/propgrid/propgrid.cpp +++ b/samples/propgrid/propgrid.cpp @@ -80,22 +80,24 @@ class wxSampleMultiButtonEditor : public wxPGTextCtrlEditor { - WX_PG_DECLARE_EDITOR_CLASS(wxSampleMultiButtonEditor) + DECLARE_DYNAMIC_CLASS(wxSampleMultiButtonEditor) public: wxSampleMultiButtonEditor() {} virtual ~wxSampleMultiButtonEditor() {} - wxPG_DECLARE_CREATECONTROLS + virtual wxString GetName() const { return "SampleMultiButtonEditor"; } + + virtual wxPGWindowList CreateControls( wxPropertyGrid* propGrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& sz ) const; virtual bool OnEvent( wxPropertyGrid* propGrid, wxPGProperty* property, wxWindow* ctrl, wxEvent& event ) const; - }; -WX_PG_IMPLEMENT_EDITOR_CLASS(SampleMultiButtonEditor,wxSampleMultiButtonEditor, - wxPGTextCtrlEditor) - +IMPLEMENT_DYNAMIC_CLASS(wxSampleMultiButtonEditor, wxPGTextCtrlEditor) wxPGWindowList wxSampleMultiButtonEditor::CreateControls( wxPropertyGrid* propGrid, wxPGProperty* property, @@ -105,19 +107,20 @@ wxPGWindowList wxSampleMultiButtonEditor::CreateControls( wxPropertyGrid* propGr // Create and populate buttons-subwindow wxPGMultiButton* buttons = new wxPGMultiButton( propGrid, sz ); + // Add two regular buttons buttons->Add( "..." ); buttons->Add( "A" ); -#if wxUSE_BMPBUTTON + // Add a bitmap button buttons->Add( wxArtProvider::GetBitmap(wxART_FOLDER) ); -#endif // Create the 'primary' editor control (textctrl in this case) wxPGWindowList wndList = wxPGTextCtrlEditor::CreateControls - ( propGrid, property, pos, buttons->GetPrimarySize() ); + ( propGrid, property, pos, + buttons->GetPrimarySize() ); // Finally, move buttons-subwindow to correct position and make sure // returned wxPGWindowList contains our custom button list. - buttons->FinalizePosition(pos); + buttons->Finalize(propGrid, pos); wndList.SetSecondary( buttons ); return wndList; @@ -132,14 +135,22 @@ bool wxSampleMultiButtonEditor::OnEvent( wxPropertyGrid* propGrid, { wxPGMultiButton* buttons = (wxPGMultiButton*) propGrid->GetEditorControlSecondary(); + if ( event.GetId() == buttons->GetButtonId(0) ) + { + // Do something when first button is pressed + wxLogDebug("First button pressed"); + return true; + } if ( event.GetId() == buttons->GetButtonId(1) ) { - wxMessageBox(wxT("Second button was pressed")); + // Do something when second button is pressed + wxLogDebug("Second button pressed"); return true; } if ( event.GetId() == buttons->GetButtonId(2) ) { - wxMessageBox(wxT("Third button was pressed")); + // Do something when third button is pressed + wxLogDebug("Third button pressed"); return true; } } @@ -1655,9 +1666,10 @@ void FormMain::PopulateWithExamples () // // Test wxSampleMultiButtonEditor - wxPGRegisterEditorClass( SampleMultiButtonEditor ); + wxPGEditor* pSampleMultiButtonEditor = new wxSampleMultiButtonEditor(); + wxPropertyGrid::RegisterEditorClass(pSampleMultiButtonEditor); pg->Append( new wxLongStringProperty(wxT("MultipleButtons"), wxPG_LABEL) ); - pg->SetPropertyEditor(wxT("MultipleButtons"), wxPG_EDITOR(SampleMultiButtonEditor) ); + pg->SetPropertyEditor(wxT("MultipleButtons"), pSampleMultiButtonEditor ); // Test SingleChoiceProperty pg->Append( new SingleChoiceProperty(wxT("SingleChoiceProperty")) ); diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index bddeac99bf..ca85c51a29 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -2136,6 +2136,19 @@ wxPGMultiButton::wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz ) SetBackgroundColour(pg->GetCellBackgroundColour()); } +void wxPGMultiButton::Finalize( wxPropertyGrid* propGrid, const wxPoint& pos ) +{ + Move( pos.x + m_fullEditorSize.x - m_buttonsWidth, pos.y ); + + // Connect event handling + for ( int i=0; iConnect(id, wxEVT_COMMAND_BUTTON_CLICKED, + wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent)); + } +} + int wxPGMultiButton::GenId( int id ) const { if ( id < -1 ) diff --git a/src/propgrid/propgrid.cpp b/src/propgrid/propgrid.cpp index 6bde5e1834..9a9417162f 100644 --- a/src/propgrid/propgrid.cpp +++ b/src/propgrid/propgrid.cpp @@ -5528,18 +5528,18 @@ void wxPropertyGrid::OnCaptureChange( wxMouseCaptureChangedEvent& WXUNUSED(event // ----------------------------------------------------------------------- // noDefCheck = true prevents infinite recursion. -wxPGEditor* wxPropertyGrid::RegisterEditorClass( wxPGEditor* editorclass, - const wxString& name, +wxPGEditor* wxPropertyGrid::RegisterEditorClass( wxPGEditor* editorClass, bool noDefCheck ) { - wxASSERT( editorclass ); + wxASSERT( editorClass ); if ( !noDefCheck && wxPGGlobalVars->m_mapEditorClasses.empty() ) RegisterDefaultEditors(); - wxPGGlobalVars->m_mapEditorClasses[name] = (void*)editorclass; + wxString name = editorClass->GetName(); + wxPGGlobalVars->m_mapEditorClasses[name] = (void*)editorClass; - return editorclass; + return editorClass; } // Registers all default editor classes -- 2.45.2