| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/propgrid/editors.h
 
- // Purpose:     wxPropertyGrid editors
 
- // Author:      Jaakko Salli
 
- // Modified by:
 
- // Created:     2007-04-14
 
- // Copyright:   (c) Jaakko Salli
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_PROPGRID_EDITORS_H_
 
- #define _WX_PROPGRID_EDITORS_H_
 
- #include "wx/defs.h"
 
- #if wxUSE_PROPGRID
 
- class WXDLLIMPEXP_FWD_PROPGRID wxPGCell;
 
- class WXDLLIMPEXP_FWD_PROPGRID wxPGProperty;
 
- class WXDLLIMPEXP_FWD_PROPGRID wxPropertyGrid;
 
- // -----------------------------------------------------------------------
 
- // wxPGWindowList contains list of editor windows returned by CreateControls.
 
- class wxPGWindowList
 
- {
 
- public:
 
-     wxPGWindowList()
 
-     {
 
-         m_primary = m_secondary = NULL;
 
-     }
 
-     void SetSecondary( wxWindow* secondary ) { m_secondary = secondary; }
 
-     wxWindow*   m_primary;
 
-     wxWindow*   m_secondary;
 
-     wxPGWindowList( wxWindow* a )
 
-     {
 
-         m_primary = a;
 
-         m_secondary = NULL;
 
-     }
 
-     wxPGWindowList( wxWindow* a, wxWindow* b )
 
-     {
 
-         m_primary = a;
 
-         m_secondary = b;
 
-     }
 
- };
 
- // -----------------------------------------------------------------------
 
- /** @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.
 
-     - Pointer to builtin editor is available as wxPGEditor_EditorName
 
-       (eg. wxPGEditor_TextCtrl).
 
-     - To add new editor you need to register it first using static function
 
-       wxPropertyGrid::RegisterEditorClass(), with code like this:
 
-         @code
 
-             wxPGEditor *editorPointer = wxPropertyGrid::RegisterEditorClass(
 
-                                             new MyEditorClass(), "MyEditor");
 
-         @endcode
 
-       After that, wxPropertyGrid will take ownership of the given object, but
 
-       you should still store editorPointer somewhere, so you can pass it to
 
-       wxPGProperty::SetEditor(), or return it from
 
-       wxPGEditor::DoGetEditorClass().
 
-     @library{wxpropgrid}
 
-     @category{propgrid}
 
- */
 
- class WXDLLIMPEXP_PROPGRID wxPGEditor : public wxObject
 
- {
 
-     DECLARE_ABSTRACT_CLASS(wxPGEditor)
 
- public:
 
-     /** Constructor. */
 
-     wxPGEditor()
 
-         : wxObject()
 
-     {
 
-         m_clientData = NULL;
 
-     }
 
-     /** Destructor. */
 
-     virtual ~wxPGEditor();
 
-     /**
 
-         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;
 
-     /**
 
-         Instantiates editor controls.
 
-         @param propgrid
 
-             wxPropertyGrid to which the property belongs (use as parent for
 
-             control).
 
-         @param property
 
-             Property for which this method is called.
 
-         @param pos
 
-             Position, inside wxPropertyGrid, to create control(s) to.
 
-         @param size
 
-             Initial size for control(s).
 
-         @remarks
 
-         - Primary control shall use id wxPG_SUBID1, and secondary (button)
 
-           control shall use wxPG_SUBID2.
 
-         - 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;
 
-     /** Loads value from property to the control. */
 
-     virtual void UpdateControl( wxPGProperty* property,
 
-                                 wxWindow* ctrl ) const = 0;
 
-     /**
 
-         Used to get the renderer to draw the value with when the control is
 
-         hidden.
 
-         Default implementation returns g_wxPGDefaultRenderer.
 
-     */
 
-     //virtual wxPGCellRenderer* GetCellRenderer() const;
 
-     /** 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).
 
-         @remarks wxPropertyGrid will automatically unfocus the editor when
 
-                 wxEVT_TEXT_ENTER is received and when it results in
 
-                 property value being modified. This happens regardless of
 
-                 editor type (ie. behaviour 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.
 
-     */
 
-     virtual bool GetValueFromControl( wxVariant& variant,
 
-                                       wxPGProperty* property,
 
-                                       wxWindow* ctrl ) const;
 
-     /**
 
-         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;
 
-     /** Sets control's value specifically from string. */
 
-     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;
 
-     /** Inserts item to existing control. Index -1 means appending.
 
-         Default implementation does nothing. Returns index of item added.
 
-     */
 
-     virtual int InsertItem( wxWindow* ctrl,
 
-                             const wxString& label,
 
-                             int index ) const;
 
-     /** 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
 
-         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.
 
-     */
 
-     virtual bool CanContainCustomImage() const;
 
-     //
 
-     // This member is public so scripting language bindings
 
-     // wrapper code can access it freely.
 
-     void*       m_clientData;
 
- };
 
- #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 = NULL;
 
- //
 
- // Following are the built-in editor classes.
 
- //
 
- class WXDLLIMPEXP_PROPGRID wxPGTextCtrlEditor : public wxPGEditor
 
- {
 
-     DECLARE_DYNAMIC_CLASS(wxPGTextCtrlEditor)
 
- public:
 
-     wxPGTextCtrlEditor() {}
 
-     virtual ~wxPGTextCtrlEditor();
 
-     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;
 
-     virtual void SetControlStringValue( wxPGProperty* property,
 
-                                         wxWindow* ctrl,
 
-                                         const wxString& txt ) const;
 
-     virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const;
 
-     // Provided so that, for example, ComboBox editor can use the same code
 
-     // (multiple inheritance would get way too messy).
 
-     static bool OnTextCtrlEvent( wxPropertyGrid* propgrid,
 
-                                  wxPGProperty* property,
 
-                                  wxWindow* ctrl,
 
-                                  wxEvent& event );
 
-     static bool GetTextCtrlValueFromControl( wxVariant& variant,
 
-                                              wxPGProperty* property,
 
-                                              wxWindow* ctrl );
 
- };
 
- class WXDLLIMPEXP_PROPGRID wxPGChoiceEditor : public wxPGEditor
 
- {
 
-     DECLARE_DYNAMIC_CLASS(wxPGChoiceEditor)
 
- public:
 
-     wxPGChoiceEditor() {}
 
-     virtual ~wxPGChoiceEditor();
 
-     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,
 
-                                      wxWindow* ctrl,
 
-                                      int value ) const;
 
-     virtual void SetControlStringValue( wxPGProperty* property,
 
-                                         wxWindow* ctrl,
 
-                                         const wxString& txt ) const;
 
-     virtual int InsertItem( wxWindow* ctrl,
 
-                             const wxString& label,
 
-                             int index ) const;
 
-     virtual void DeleteItem( wxWindow* ctrl, int index ) const;
 
-     virtual bool CanContainCustomImage() const;
 
-     // CreateControls calls this with CB_READONLY in extraStyle
 
-     wxWindow* CreateControlsBase( wxPropertyGrid* propgrid,
 
-                                   wxPGProperty* property,
 
-                                   const wxPoint& pos,
 
-                                   const wxSize& sz,
 
-                                   long extraStyle ) const;
 
- };
 
- class WXDLLIMPEXP_PROPGRID wxPGComboBoxEditor : public wxPGChoiceEditor
 
- {
 
-     DECLARE_DYNAMIC_CLASS(wxPGComboBoxEditor)
 
- public:
 
-     wxPGComboBoxEditor() {}
 
-     virtual ~wxPGComboBoxEditor();
 
-     virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid,
 
-                                           wxPGProperty* property,
 
-                                           const wxPoint& pos,
 
-                                           const wxSize& size) const;
 
-     virtual wxString GetName() const;
 
-     virtual void UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const;
 
-     virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
 
-         wxWindow* ctrl, wxEvent& event ) const;
 
-     virtual bool GetValueFromControl( wxVariant& variant,
 
-                                       wxPGProperty* property,
 
-                                       wxWindow* ctrl ) const;
 
-     virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const;
 
- };
 
- class WXDLLIMPEXP_PROPGRID wxPGChoiceAndButtonEditor : public wxPGChoiceEditor
 
- {
 
- public:
 
-     wxPGChoiceAndButtonEditor() {}
 
-     virtual ~wxPGChoiceAndButtonEditor();
 
-     virtual wxString GetName() const;
 
-     virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid,
 
-                                           wxPGProperty* property,
 
-                                           const wxPoint& pos,
 
-                                           const wxSize& size) const;
 
-     DECLARE_DYNAMIC_CLASS(wxPGChoiceAndButtonEditor)
 
- };
 
- class WXDLLIMPEXP_PROPGRID
 
- wxPGTextCtrlAndButtonEditor : public wxPGTextCtrlEditor
 
- {
 
- public:
 
-     wxPGTextCtrlAndButtonEditor() {}
 
-     virtual ~wxPGTextCtrlAndButtonEditor();
 
-     virtual wxString GetName() const;
 
-     virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid,
 
-                                           wxPGProperty* property,
 
-                                           const wxPoint& pos,
 
-                                           const wxSize& size) const;
 
-     DECLARE_DYNAMIC_CLASS(wxPGTextCtrlAndButtonEditor)
 
- };
 
- #if wxPG_INCLUDE_CHECKBOX
 
- //
 
- // Use custom check box code instead of native control
 
- // for cleaner (ie. more integrated) look.
 
- //
 
- class WXDLLIMPEXP_PROPGRID wxPGCheckBoxEditor : public wxPGEditor
 
- {
 
-     DECLARE_DYNAMIC_CLASS(wxPGCheckBoxEditor)
 
- public:
 
-     wxPGCheckBoxEditor() {}
 
-     virtual ~wxPGCheckBoxEditor();
 
-     virtual wxString GetName() const;
 
-     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,
 
-                             wxPGProperty* property,
 
-                             const wxString& text ) const;
 
-     //virtual wxPGCellRenderer* GetCellRenderer() const;
 
-     virtual void SetControlIntValue( wxPGProperty* property,
 
-                                      wxWindow* ctrl,
 
-                                      int value ) const;
 
- };
 
- #endif
 
- // -----------------------------------------------------------------------
 
- // Editor class registeration macro (mostly for internal use)
 
- #define wxPGRegisterEditorClass(EDITOR) \
 
-     if ( wxPGEditor_##EDITOR == NULL ) \
 
-     { \
 
-         wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \
 
-                 new wxPG##EDITOR##Editor ); \
 
-     }
 
- // -----------------------------------------------------------------------
 
- /** @class wxPGEditorDialogAdapter
 
-     Derive a class from this to adapt an existing editor dialog or function to
 
-     be used when editor button of a property is pushed.
 
-     You only need to derive class and implement DoShowDialog() to create and
 
-     show the dialog, and finally submit the value returned by the dialog
 
-     via SetValue().
 
-     @library{wxpropgrid}
 
-     @category{propgrid}
 
- */
 
- class WXDLLIMPEXP_PROPGRID wxPGEditorDialogAdapter : public wxObject
 
- {
 
-     DECLARE_ABSTRACT_CLASS(wxPGEditorDialogAdapter)
 
- public:
 
-     wxPGEditorDialogAdapter()
 
-         : wxObject()
 
-     {
 
-         m_clientData = NULL;
 
-     }
 
-     virtual ~wxPGEditorDialogAdapter() { }
 
-     bool ShowDialog( wxPropertyGrid* propGrid, wxPGProperty* property );
 
-     virtual bool DoShowDialog( wxPropertyGrid* propGrid,
 
-                                wxPGProperty* property ) = 0;
 
-     void SetValue( wxVariant value )
 
-     {
 
-         m_value = value;
 
-     }
 
-     /**
 
-         This method is typically only used if deriving class from existing
 
-         adapter with value conversion purposes.
 
-     */
 
-     wxVariant& GetValue() { return m_value; }
 
-     //
 
-     // This member is public so scripting language bindings
 
-     // wrapper code can access it freely.
 
-     void*               m_clientData;
 
- private:
 
-     wxVariant           m_value;
 
- };
 
- // -----------------------------------------------------------------------
 
- /** @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().
 
- */
 
- 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
 
-         { return (const wxWindow*) m_buttons[i]; }
 
-     /** Utility function to be used in event handlers.
 
-     */
 
-     int GetButtonId( unsigned int i ) const { return GetButton(i)->GetId(); }
 
-     /** Returns number of buttons.
 
-     */
 
-     unsigned int GetCount() const { return (unsigned int) m_buttons.size(); }
 
-     void Add( const wxString& label, int id = -2 );
 
- #if wxUSE_BMPBUTTON
 
-     void Add( const wxBitmap& bitmap, int id = -2 );
 
- #endif
 
-     wxSize GetPrimarySize() const
 
-     {
 
-         return wxSize(m_fullEditorSize.x - m_buttonsWidth, m_fullEditorSize.y);
 
-     }
 
-     void Finalize( wxPropertyGrid* propGrid, const wxPoint& pos );
 
- protected:
 
-     void DoAddButton( wxWindow* button, const wxSize& sz );
 
-     int GenId( int id ) const;
 
-     wxArrayPtrVoid  m_buttons;
 
-     wxSize          m_fullEditorSize;
 
-     int             m_buttonsWidth;
 
- };
 
- // -----------------------------------------------------------------------
 
- #endif // wxUSE_PROPGRID
 
- #endif // _WX_PROPGRID_EDITORS_H_
 
 
  |