X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c26873c8ef31e10b8e518792c8b6b67c3b10b144..937d5b6075db060b98daa0f0fadbaa528bc85554:/include/wx/propgrid/editors.h?ds=sidebyside diff --git a/include/wx/propgrid/editors.h b/include/wx/propgrid/editors.h index d9d6b0729d..d35105a365 100644 --- a/include/wx/propgrid/editors.h +++ b/include/wx/propgrid/editors.h @@ -75,9 +75,7 @@ public: */ class WXDLLIMPEXP_PROPGRID wxPGEditor : public wxObject { -#ifndef SWIG DECLARE_ABSTRACT_CLASS(wxPGEditor) -#endif public: /** Constructor. */ @@ -92,10 +90,11 @@ public: /** Returns pointer to the name of the editor. For example, - wxPGEditor_TextCtrl has name "TextCtrl". This method is autogenerated - for custom editors. + 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. @@ -113,26 +112,15 @@ public: @remarks - Primary control shall use id wxPG_SUBID1, and secondary (button) control shall use wxPG_SUBID2. - - Implementation shoud connect all necessary events to the - wxPropertyGrid::OnCustomEditorEvent. For Example: - @code - // Relays wxEVT_COMMAND_TEXT_UPDATED events of primary editor - // control to the OnEvent. - 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(). + - Unlike in previous version of wxPropertyGrid, it is no longer + necessary to call wxEvtHandler::Connect() for interesting editor + events. Instead, all events from control are now automatically + forwarded to wxPGEditor::OnEvent() and wxPGProperty::OnEvent(). */ virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid, wxPGProperty* property, const wxPoint& pos, const wxSize& size) const = 0; - #define wxPG_DECLARE_CREATECONTROLS \ - virtual wxPGWindowList \ - CreateControls( wxPropertyGrid* propgrid, wxPGProperty* property, \ - const wxPoint& pos, const wxSize& sz ) const; /** Loads value from property to the control. */ virtual void UpdateControl( wxPGProperty* property, @@ -175,9 +163,35 @@ public: wxWindow* ctrl ) const; #endif - /** Sets value in control to unspecified. */ + /** + Sets new appearance for the control. Default implementation + sets foreground colour, background colour, font, plus text + for wxTextCtrl and wxComboCtrl. + + @param appearance + New appearance to be applied. + + @param oldAppearance + Previously applied appearance. Used to detect which + control attributes need to be changed (e.g. so we only + change background colour if really needed). + + @param unspecified + @true if the new appearance represents an unspecified + property value. + */ + virtual void SetControlAppearance( wxPropertyGrid* pg, + wxPGProperty* property, + wxWindow* ctrl, + const wxPGCell& appearance, + const wxPGCell& oldAppearance, + bool unspecified ) const; + + /** + Sets value in control to unspecified. + */ virtual void SetValueToUnspecified( wxPGProperty* property, - wxWindow* ctrl ) const = 0; + wxWindow* ctrl ) const; /** Sets control's value specifically from string. */ virtual void SetControlStringValue( wxPGProperty* property, @@ -218,41 +232,13 @@ public: }; -// -// Note that we don't use this macro in this file because -// otherwise doxygen gets confused. -// -#define WX_PG_DECLARE_EDITOR_CLASS(CLASSNAME) \ - DECLARE_DYNAMIC_CLASS(CLASSNAME) \ -public: \ - virtual wxString GetName() const; \ -private: - - -#define WX_PG_IMPLEMENT_EDITOR_CLASS(EDITOR,CLASSNAME,BASECLASS) \ +#define WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(EDITOR,CLASSNAME,BASECLASS) \ IMPLEMENT_DYNAMIC_CLASS(CLASSNAME, BASECLASS) \ wxString CLASSNAME::GetName() const \ { \ return wxS(#EDITOR); \ } \ -wxPGEditor* wxPGEditor_##EDITOR = (wxPGEditor*) NULL; \ -wxPGEditor* wxPGConstruct##EDITOR##EditorClass() \ -{ \ - wxASSERT( !wxPGEditor_##EDITOR ); \ - return new CLASSNAME(); \ -} - - -#define WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS() \ -wxPG_DECLARE_CREATECONTROLS \ -virtual void UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const; \ -virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property, \ - wxWindow* primary, wxEvent& event ) const; \ -virtual bool GetValueFromControl( wxVariant& variant, \ - wxPGProperty* property, \ - wxWindow* ctrl ) const; \ -virtual void SetValueToUnspecified( wxPGProperty* property, \ - wxWindow* ctrl ) const; +wxPGEditor* wxPGEditor_##EDITOR = NULL; // @@ -261,14 +247,25 @@ virtual void SetValueToUnspecified( wxPGProperty* property, \ class WXDLLIMPEXP_PROPGRID wxPGTextCtrlEditor : public wxPGEditor { -#ifndef SWIG DECLARE_DYNAMIC_CLASS(wxPGTextCtrlEditor) -#endif public: wxPGTextCtrlEditor() {} virtual ~wxPGTextCtrlEditor(); - WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS() + virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& size) const; + virtual void UpdateControl( wxPGProperty* property, + wxWindow* ctrl ) const; + virtual bool OnEvent( wxPropertyGrid* propgrid, + wxPGProperty* property, + wxWindow* primaryCtrl, + wxEvent& event ) const; + virtual bool GetValueFromControl( wxVariant& variant, + wxPGProperty* property, + wxWindow* ctrl ) const; + virtual wxString GetName() const; //virtual wxPGCellRenderer* GetCellRenderer() const; @@ -293,14 +290,26 @@ public: class WXDLLIMPEXP_PROPGRID wxPGChoiceEditor : public wxPGEditor { -#ifndef SWIG DECLARE_DYNAMIC_CLASS(wxPGChoiceEditor) -#endif public: wxPGChoiceEditor() {} virtual ~wxPGChoiceEditor(); - WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS() + virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& size) const; + virtual void UpdateControl( wxPGProperty* property, + wxWindow* ctrl ) const; + virtual bool OnEvent( wxPropertyGrid* propgrid, + wxPGProperty* property, + wxWindow* primaryCtrl, + wxEvent& event ) const; + virtual bool GetValueFromControl( wxVariant& variant, + wxPGProperty* property, + wxWindow* ctrl ) const; + virtual void SetValueToUnspecified( wxPGProperty* property, + wxWindow* ctrl ) const; virtual wxString GetName() const; virtual void SetControlIntValue( wxPGProperty* property, @@ -328,15 +337,15 @@ public: class WXDLLIMPEXP_PROPGRID wxPGComboBoxEditor : public wxPGChoiceEditor { -#ifndef SWIG DECLARE_DYNAMIC_CLASS(wxPGComboBoxEditor) -#endif public: wxPGComboBoxEditor() {} virtual ~wxPGComboBoxEditor(); - // Macro is used for convenience due to different signature with wxPython - wxPG_DECLARE_CREATECONTROLS + virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& size) const; virtual wxString GetName() const; @@ -364,8 +373,10 @@ public: virtual ~wxPGChoiceAndButtonEditor(); virtual wxString GetName() const; - // Macro is used for convenience due to different signature with wxPython - wxPG_DECLARE_CREATECONTROLS + virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& size) const; DECLARE_DYNAMIC_CLASS(wxPGChoiceAndButtonEditor) }; @@ -377,7 +388,11 @@ public: wxPGTextCtrlAndButtonEditor() {} virtual ~wxPGTextCtrlAndButtonEditor(); virtual wxString GetName() const; - wxPG_DECLARE_CREATECONTROLS + + virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& size) const; DECLARE_DYNAMIC_CLASS(wxPGTextCtrlAndButtonEditor) }; @@ -385,7 +400,7 @@ public: #endif // !SWIG -#if wxPG_INCLUDE_CHECKBOX || defined(DOXYGEN) +#if wxPG_INCLUDE_CHECKBOX // // Use custom check box code instead of native control @@ -393,15 +408,27 @@ public: // class WXDLLIMPEXP_PROPGRID wxPGCheckBoxEditor : public wxPGEditor { -#ifndef SWIG DECLARE_DYNAMIC_CLASS(wxPGCheckBoxEditor) -#endif public: wxPGCheckBoxEditor() {} virtual ~wxPGCheckBoxEditor(); virtual wxString GetName() const; - WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS() + virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& size) const; + virtual void UpdateControl( wxPGProperty* property, + wxWindow* ctrl ) const; + virtual bool OnEvent( wxPropertyGrid* propgrid, + wxPGProperty* property, + wxWindow* primaryCtrl, + wxEvent& event ) const; + virtual bool GetValueFromControl( wxVariant& variant, + wxPGProperty* property, + wxWindow* ctrl ) const; + virtual void SetValueToUnspecified( wxPGProperty* property, + wxWindow* ctrl ) const; virtual void DrawValue( wxDC& dc, const wxRect& rect, @@ -418,27 +445,15 @@ public: // ----------------------------------------------------------------------- -// Editor class registeration macros +// Editor class registeration macro (mostly for internal use) #define wxPGRegisterEditorClass(EDITOR) \ - if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \ + if ( wxPGEditor_##EDITOR == NULL ) \ { \ wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \ - wxPGConstruct##EDITOR##EditorClass() ); \ + new wxPG##EDITOR##Editor ); \ } -// Use this in RegisterDefaultEditors. -#define wxPGRegisterDefaultEditorClass(EDITOR) \ -if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \ - { \ - wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \ - wxPGConstruct##EDITOR##EditorClass(), true ); \ - } - -#define wxPG_INIT_REQUIRED_EDITOR(T) \ - wxPGRegisterEditorClass(T) - - // ----------------------------------------------------------------------- /** @class wxPGEditorDialogAdapter @@ -455,9 +470,7 @@ if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \ */ class WXDLLIMPEXP_PROPGRID wxPGEditorDialogAdapter : public wxObject { -#ifndef SWIG DECLARE_ABSTRACT_CLASS(wxPGEditorDialogAdapter) -#endif public: wxPGEditorDialogAdapter() : wxObject() @@ -506,6 +519,7 @@ class WXDLLIMPEXP_PROPGRID wxPGMultiButton : public wxWindow { public: wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz ); + virtual ~wxPGMultiButton() {} wxWindow* GetButton( unsigned int i ) { return (wxWindow*) m_buttons[i]; } const wxWindow* GetButton( unsigned int i ) const @@ -517,7 +531,7 @@ public: /** Returns number of buttons. */ - int GetCount() const { return m_buttons.Count(); } + unsigned int GetCount() const { return (unsigned int) m_buttons.size(); } void Add( const wxString& label, int id = -2 ); #if wxUSE_BMPBUTTON @@ -531,15 +545,15 @@ public: void Finalize( wxPropertyGrid* propGrid, const wxPoint& pos ); -#ifndef DOXYGEN protected: + void DoAddButton( wxWindow* button, const wxSize& sz ); + int GenId( int id ) const; wxArrayPtrVoid m_buttons; wxSize m_fullEditorSize; int m_buttonsWidth; -#endif // !DOXYGEN }; // -----------------------------------------------------------------------