| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        editors.h
 
- // Purpose:     interface of wxPropertyGrid editors
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
-     @class wxPGEditor
 
-     Base class for custom wxPropertyGrid editors.
 
-     @remarks
 
-     - 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 built-in editor is available as wxPGEditor_EditorName
 
-       (eg. wxPGEditor_TextCtrl).
 
-     - 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");
 
-         @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 wxPGEditor : public wxObject
 
- {
 
- public:
 
-     /** Constructor. */
 
-     wxPGEditor();
 
-     /** 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;
 
-     /**
 
-         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
 
-                  @c 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 value in control to unspecified. */
 
-     virtual void SetValueToUnspecified( wxPGProperty* property,
 
-                                         wxWindow* ctrl ) const = 0;
 
-     /**
 
-         Called by property grid to set new appearance for the control.
 
-         Default implementation  sets foreground colour, background colour,
 
-         font, plus text for wxTextCtrl and wxComboCtrl.
 
-         The parameter @a appearance represents the new appearance to be applied.
 
-         The parameter @a oldAppearance is the previously applied appearance. 
 
-         Used to detect which control attributes need to be changed (e.g. so we only
 
-         change background colour if really needed).
 
-         Finally, the parameter @a unspecified if @true tells this function that
 
-         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 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 end of list.
 
-         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 implementation returns @false.
 
-     */
 
-     virtual bool CanContainCustomImage() const;
 
- };
 
- /**
 
-     @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:
 
-     @code
 
-     #include <wx/propgrid/editors.h>
 
-     class wxSampleMultiButtonEditor : public wxPGTextCtrlEditor
 
-     {
 
-         wxDECLARE_DYNAMIC_CLASS(wxSampleMultiButtonEditor);
 
-         
 
-     public:
 
-         wxSampleMultiButtonEditor() {}
 
-         virtual ~wxSampleMultiButtonEditor() {}
 
-         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;
 
-     };
 
-     wxIMPLEMENT_DYNAMIC_CLASS(wxSampleMultiButtonEditor, wxPGTextCtrlEditor);
 
-     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 );
 
-         // 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->Finalize(propGrid, pos);
 
-         wndList.SetSecondary( buttons );
 
-         return wndList;
 
-     }
 
-     bool wxSampleMultiButtonEditor::OnEvent( wxPropertyGrid* propGrid,
 
-                                              wxPGProperty* property,
 
-                                              wxWindow* ctrl,
 
-                                              wxEvent& event ) const
 
-     {
 
-         if ( event.GetEventType() == wxEVT_BUTTON )
 
-         {
 
-             wxPGMultiButton* buttons = (wxPGMultiButton*) propGrid->GetEditorControlSecondary();
 
-             if ( event.GetId() == buttons->GetButtonId(0) )
 
-             {
 
-                 // Do something when the first button is pressed
 
-                 // Return true if the action modified the value in editor.
 
-                 ...
 
-             }
 
-             if ( event.GetId() == buttons->GetButtonId(1) )
 
-             {
 
-                 // Do something when the second button is pressed
 
-                 ...
 
-             }
 
-             if ( event.GetId() == buttons->GetButtonId(2) )
 
-             {
 
-                 // Do something when the third button is pressed
 
-                 ...
 
-             }
 
-         }
 
-         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
 
-         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", multiButtonEditor );
 
-     @endcode
 
-     @library{wxpropgrid}
 
-     @category{propgrid}
 
- */
 
- class WXDLLIMPEXP_PROPGRID wxPGMultiButton : public wxWindow
 
- {
 
- public:
 
-     /**
 
-         Constructor.
 
-     */
 
-     wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz );
 
-     /**
 
-         Destructor.
 
-     */
 
-     virtual ~wxPGMultiButton() { }
 
-     /**
 
-         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.
 
-         @param propGrid
 
-             wxPropertyGrid given in CreateControls().
 
-         @param pos
 
-             wxPoint given in CreateControls().
 
-     */
 
-     void Finalize( wxPropertyGrid* propGrid, const wxPoint& pos );
 
-     /**
 
-         Returns pointer to one of the buttons.
 
-     */
 
-     wxWindow* GetButton( unsigned int i );
 
-     /**
 
-         Returns Id of one of the buttons.
 
-         This is utility function to be used in event handlers.
 
-     */
 
-     int GetButtonId( unsigned int i ) const;
 
-     /**
 
-         Returns number of buttons.
 
-     */
 
-     unsigned int GetCount();
 
-     /**
 
-         Returns size of primary editor control, as appropriately
 
-         reduced by number of buttons present.
 
-     */
 
-     wxSize GetPrimarySize() const;
 
- };
 
 
  |