]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed wxPGMultiButton (event handling, FinalizePosition() -> Finalize(), no longer...
authorJaakko Salli <jaakko.salli@dnainternet.net>
Sat, 27 Sep 2008 14:03:10 +0000 (14:03 +0000)
committerJaakko Salli <jaakko.salli@dnainternet.net>
Sat, 27 Sep 2008 14:03:10 +0000 (14:03 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55915 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/propgrid/editors.h
include/wx/propgrid/propgrid.h
interface/wx/propgrid/editors.h
samples/propgrid/propgrid.cpp
src/propgrid/editors.cpp
src/propgrid/propgrid.cpp

index 7a6a1e3e2b45bbf9655717fdef9ea4d2299b8b1e..1058989c474326368277d85f5a51952516522000 100644 (file)
@@ -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 <wx/propgrid/editors.h>
-
-    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:
index 23fe4b1f1bbd919012b5f1427c995635ce39bb76..65ab06c805a99c70fb6cede8e6d2b504fa8cd51d 100644 (file)
@@ -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
 
index 693112e573181068a86a1b2c59858f4490fe4007..e0c8555ede527e672026dcbc3c55a52c2b57a9e3 100644 (file)
@@ -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 <wx/propgrid/editors.h>
 
-    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_
index ceeb0748c6131620d978f413ea6c58edb392e28b..55eb7706a503450fa5b0abfaea61dfefd9a5ffc3 100644 (file)
 
 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")) );
index bddeac99bf3c6e27ae0c172cbcb8e0e394ef7fac..ca85c51a29c16bda056c9ed24cae3c2b93955dd2 100644 (file)
@@ -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; i<GetCount(); i++ )
+    {
+        wxWindowID id = GetButtonId(i);
+        propGrid->Connect(id, wxEVT_COMMAND_BUTTON_CLICKED,
+            wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent));
+    }
+}
+
 int wxPGMultiButton::GenId( int id ) const
 {
     if ( id < -1 )
index 6bde5e1834e80f0facd97e5606837fefe525f6b0..9a9417162f7938df550238c73f6a47574cdf90d3 100644 (file)
@@ -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