X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d9fb481c56002b3f8fcda13069e0890d33a00511..5ecd2ba500a9783b66f0d95e9ff8d98146e18c30:/include/wx/propgrid/editors.h diff --git a/include/wx/propgrid/editors.h b/include/wx/propgrid/editors.h index 7a6a1e3e2b..0d6ff4db6e 100644 --- a/include/wx/propgrid/editors.h +++ b/include/wx/propgrid/editors.h @@ -118,8 +118,9 @@ 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(). @@ -154,6 +155,12 @@ public: /** 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; @@ -417,7 +424,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 +432,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 +500,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 - - 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 +529,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: