diff --git a/include/wx/richtext/richtextctrl.h b/include/wx/richtext/richtextctrl.h index eb0adc0d44..93e26d6bc9 100644 --- a/include/wx/richtext/richtextctrl.h +++ b/include/wx/richtext/richtextctrl.h @@ -2374,6 +2374,11 @@ protected: @event{EVT_RICHTEXT_CHARACTER(id, func)} Process a @c wxEVT_RICHTEXT_CHARACTER event, generated when the user presses a character key. Valid event functions: GetFlags, GetPosition, GetCharacter. + @event{EVT_RICHTEXT_CONSUMING_CHARACTER(id, func)} + Process a @c wxEVT_RICHTEXT_CONSUMING_CHARACTER event, generated when the user + presses a character key but before it is processed and inserted into the control. + Call Veto to prevent normal processing. Valid event functions: GetFlags, GetPosition, + GetCharacter, Veto. @event{EVT_RICHTEXT_DELETE(id, func)} Process a @c wxEVT_RICHTEXT_DELETE event, generated when the user presses the backspace or delete key. Valid event functions: GetFlags, GetPosition. @@ -2563,6 +2568,7 @@ wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_RICHTEXT_MIDDLE_CLICK, wxR wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_RICHTEXT_LEFT_DCLICK, wxRichTextEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_RICHTEXT_RETURN, wxRichTextEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_RICHTEXT_CHARACTER, wxRichTextEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_RICHTEXT_CONSUMING_CHARACTER, wxRichTextEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_RICHTEXT_DELETE, wxRichTextEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_RICHTEXT_STYLESHEET_CHANGING, wxRichTextEvent ); @@ -2589,6 +2595,7 @@ typedef void (wxEvtHandler::*wxRichTextEventFunction)(wxRichTextEvent&); #define EVT_RICHTEXT_LEFT_DCLICK(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_RICHTEXT_LEFT_DCLICK, id, -1, wxRichTextEventHandler( fn ), NULL ), #define EVT_RICHTEXT_RETURN(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_RICHTEXT_RETURN, id, -1, wxRichTextEventHandler( fn ), NULL ), #define EVT_RICHTEXT_CHARACTER(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_RICHTEXT_CHARACTER, id, -1, wxRichTextEventHandler( fn ), NULL ), +#define EVT_RICHTEXT_CONSUMING_CHARACTER(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_RICHTEXT_CONSUMING_CHARACTER, id, -1, wxRichTextEventHandler( fn ), NULL ), #define EVT_RICHTEXT_DELETE(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_RICHTEXT_DELETE, id, -1, wxRichTextEventHandler( fn ), NULL ), #define EVT_RICHTEXT_STYLESHEET_CHANGING(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_RICHTEXT_STYLESHEET_CHANGING, id, -1, wxRichTextEventHandler( fn ), NULL ), diff --git a/interface/wx/richtext/richtextctrl.h b/interface/wx/richtext/richtextctrl.h index 5ade831af6..c8dab6f3e3 100644 --- a/interface/wx/richtext/richtextctrl.h +++ b/interface/wx/richtext/richtextctrl.h @@ -2234,6 +2234,11 @@ protected: @event{EVT_RICHTEXT_CHARACTER(id, func)} Process a @c wxEVT_RICHTEXT_CHARACTER event, generated when the user presses a character key. Valid event functions: GetFlags, GetPosition, GetCharacter. + @event{EVT_RICHTEXT_CONSUMING_CHARACTER(id, func)} + Process a @c wxEVT_RICHTEXT_CONSUMING_CHARACTER event, generated when the user + presses a character key but before it is processed and inserted into the control. + Call Veto to prevent normal processing. Valid event functions: GetFlags, GetPosition, + GetCharacter, Veto. @event{EVT_RICHTEXT_DELETE(id, func)} Process a @c wxEVT_RICHTEXT_DELETE event, generated when the user presses the backspace or delete key. Valid event functions: GetFlags, GetPosition. @@ -2413,6 +2418,7 @@ wxEventType wxEVT_RICHTEXT_MIDDLE_CLICK; wxEventType wxEVT_RICHTEXT_LEFT_DCLICK; wxEventType wxEVT_RICHTEXT_RETURN; wxEventType wxEVT_RICHTEXT_CHARACTER; +wxEventType wxEVT_RICHTEXT_CONSUMING_CHARACTER; wxEventType wxEVT_RICHTEXT_DELETE; wxEventType wxEVT_RICHTEXT_STYLESHEET_CHANGING; diff --git a/src/richtext/richtextctrl.cpp b/src/richtext/richtextctrl.cpp index f639779d11..173b662dce 100644 --- a/src/richtext/richtextctrl.cpp +++ b/src/richtext/richtextctrl.cpp @@ -54,6 +54,7 @@ wxDEFINE_EVENT( wxEVT_RICHTEXT_RIGHT_CLICK, wxRichTextEvent ); wxDEFINE_EVENT( wxEVT_RICHTEXT_LEFT_DCLICK, wxRichTextEvent ); wxDEFINE_EVENT( wxEVT_RICHTEXT_RETURN, wxRichTextEvent ); wxDEFINE_EVENT( wxEVT_RICHTEXT_CHARACTER, wxRichTextEvent ); +wxDEFINE_EVENT( wxEVT_RICHTEXT_CONSUMING_CHARACTER, wxRichTextEvent ); wxDEFINE_EVENT( wxEVT_RICHTEXT_DELETE, wxRichTextEvent ); wxDEFINE_EVENT( wxEVT_RICHTEXT_STYLESHEET_REPLACING, wxRichTextEvent ); @@ -1321,6 +1322,23 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event) return; } + wxRichTextEvent cmdEvent1( + wxEVT_RICHTEXT_CONSUMING_CHARACTER, + GetId()); + cmdEvent1.SetEventObject(this); + cmdEvent1.SetFlags(flags); +#if wxUSE_UNICODE + cmdEvent1.SetCharacter(event.GetUnicodeKey()); +#else + cmdEvent1.SetCharacter((wxChar) keycode); +#endif + cmdEvent1.SetPosition(m_caretPosition+1); + cmdEvent1.SetContainer(GetFocusObject()); + if (GetEventHandler()->ProcessEvent(cmdEvent1) && !cmdEvent1.IsAllowed()) + { + return; + } + wxRichTextEvent cmdEvent( wxEVT_RICHTEXT_CHARACTER, GetId());