]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/propgrid/editors.h
misc fixes of ctor signatures
[wxWidgets.git] / interface / wx / propgrid / editors.h
index 693112e573181068a86a1b2c59858f4490fe4007..7f39b20814b1b287c5f54cbc1e875bce3f89350e 100644 (file)
@@ -2,26 +2,28 @@
 // Name:        editors.h
 // Purpose:     interface of wxPropertyGrid editors
 // Author:      wxWidgets team
-// RCS-ID:      $Id:
+// RCS-ID:      $Id$
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 // -----------------------------------------------------------------------
 
-/** @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,28 @@ 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". If you dont' need to access
+        your custom editor by string name, then you do not need to implement
+        this function.
     */
-    virtual wxString GetName() const = 0;
+    virtual wxString GetName() const;
+
+    /**
+        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
@@ -70,104 +80,126 @@ public:
             @code
                 // Relays wxEVT_COMMAND_TEXT_UPDATED events of primary editor
                 // control to the OnEvent.
-                propgrid->Connect(control->GetId(), wxEVT_COMMAND_TEXT_UPDATED,
-                                  wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent));
+                control->Connect(control->GetId(), wxEVT_COMMAND_TEXT_UPDATED,
+                                 wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent),
+                                 NULL, propgrid);
             @endcode
           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;
-
-    /** Handles events. Returns true if value in control was modified
-        (see wxPGProperty::OnEvent for more information).
+    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).
+
+        @remarks wxPropertyGrid will automatically unfocus the editor when
+                wxEVT_COMMAND_TEXT_ENTER is received and when it results in
+                property value being modified. This happens regardless of
+                editor type (ie. behavior is same for any wxTextCtrl and
+                wxComboBox based editor).
     */
     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() {}
 
-        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(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 +212,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 +239,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 +258,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 +276,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 );
+
+    /**
+        Adds new bitmap button.
+    */
+    void Add( const wxBitmap& bitmap, int id = -2 );
+
+    /**
+        Call this in CreateControls() of your custom editor class
+        after all buttons have been added.
 
-    /** Utility function to be used in event handlers.
+        @param propGrid
+            wxPropertyGrid given in CreateControls().
+
+        @param pos
+            wxPoint given in CreateControls().
     */
-    int GetButtonId( unsigned int i ) const { return GetButton(i)->GetId(); }
+    void Finalize( wxPropertyGrid* propGrid, const wxPoint& pos );
 
-    /** Returns number of buttons.
+    /**
+        Returns pointer to one of the buttons.
     */
-    int GetCount() const { return m_buttons.Count(); }
+    wxWindow* GetButton( unsigned int i );
 
-    void Add( const wxString& label, int id = -2 );
-    void Add( const wxBitmap& bitmap, int id = -2 );
+    /**
+        Returns Id of one of the buttons. This is utility function to be
+        used in event handlers.
+    */
+    int GetButtonId( unsigned int i ) const;
 
-    wxSize GetPrimarySize() const
-    {
-        return wxSize(m_fullEditorSize.x - m_buttonsWidth, m_fullEditorSize.y);
-    }
+    /**
+        Returns number of buttons.
+    */
+    unsigned int GetCount();
 
-    void FinalizePosition( const wxPoint& pos )
-    {
-        Move( pos.x + m_fullEditorSize.x - m_buttonsWidth, pos.y );
-    }
+    /**
+        Returns size of primary editor control, as appropriately
+        reduced by number of buttons present.
+    */
+    wxSize GetPrimarySize() const;
 };
 
 // -----------------------------------------------------------------------
-
-#endif // _WX_PROPGRID_EDITORS_H_