};
#endif
-IMPLEMENT_CLASS( wxRichTextCtrl, wxControl )
+IMPLEMENT_DYNAMIC_CLASS( wxRichTextCtrl, wxControl )
-IMPLEMENT_CLASS( wxRichTextEvent, wxNotifyEvent )
+IMPLEMENT_DYNAMIC_CLASS( wxRichTextEvent, wxNotifyEvent )
BEGIN_EVENT_TABLE( wxRichTextCtrl, wxControl )
EVT_PAINT(wxRichTextCtrl::OnPaint)
GetBuffer().AddEventHandler(this);
// Accelerators
- wxAcceleratorEntry entries[4];
+ wxAcceleratorEntry entries[6];
entries[0].Set(wxACCEL_CMD, (int) 'C', wxID_COPY);
entries[1].Set(wxACCEL_CMD, (int) 'X', wxID_CUT);
entries[2].Set(wxACCEL_CMD, (int) 'V', wxID_PASTE);
entries[3].Set(wxACCEL_CMD, (int) 'A', wxID_SELECTALL);
+ entries[4].Set(wxACCEL_CMD, (int) 'Z', wxID_UNDO);
+ entries[5].Set(wxACCEL_CMD, (int) 'Y', wxID_REDO);
- wxAcceleratorTable accel(4, entries);
+ wxAcceleratorTable accel(6, entries);
SetAcceleratorTable(accel);
return true;
if (event.GetEventType() == wxEVT_KEY_DOWN)
{
+ if (event.GetKeyCode() == WXK_LEFT ||
+ event.GetKeyCode() == WXK_RIGHT ||
+ event.GetKeyCode() == WXK_UP ||
+ event.GetKeyCode() == WXK_DOWN ||
+ event.GetKeyCode() == WXK_HOME ||
+ event.GetKeyCode() == WXK_PAGEUP ||
+ event.GetKeyCode() == WXK_PAGEDOWN ||
+ event.GetKeyCode() == WXK_END ||
+
+ event.GetKeyCode() == WXK_NUMPAD_LEFT ||
+ event.GetKeyCode() == WXK_NUMPAD_RIGHT ||
+ event.GetKeyCode() == WXK_NUMPAD_UP ||
+ event.GetKeyCode() == WXK_NUMPAD_DOWN ||
+ event.GetKeyCode() == WXK_NUMPAD_HOME ||
+ event.GetKeyCode() == WXK_NUMPAD_PAGEUP ||
+ event.GetKeyCode() == WXK_NUMPAD_PAGEDOWN ||
+ event.GetKeyCode() == WXK_NUMPAD_END)
+ {
+ KeyboardNavigate(event.GetKeyCode(), flags);
+ return;
+ }
+
+ long keycode = event.GetKeyCode();
+ switch ( keycode )
+ {
+ case WXK_ESCAPE:
+ case WXK_START:
+ case WXK_LBUTTON:
+ case WXK_RBUTTON:
+ case WXK_CANCEL:
+ case WXK_MBUTTON:
+ case WXK_CLEAR:
+ case WXK_SHIFT:
+ case WXK_ALT:
+ case WXK_CONTROL:
+ case WXK_MENU:
+ case WXK_PAUSE:
+ case WXK_CAPITAL:
+ case WXK_END:
+ case WXK_HOME:
+ case WXK_LEFT:
+ case WXK_UP:
+ case WXK_RIGHT:
+ case WXK_DOWN:
+ case WXK_SELECT:
+ case WXK_PRINT:
+ case WXK_EXECUTE:
+ case WXK_SNAPSHOT:
+ case WXK_INSERT:
+ case WXK_HELP:
+ case WXK_F1:
+ case WXK_F2:
+ case WXK_F3:
+ case WXK_F4:
+ case WXK_F5:
+ case WXK_F6:
+ case WXK_F7:
+ case WXK_F8:
+ case WXK_F9:
+ case WXK_F10:
+ case WXK_F11:
+ case WXK_F12:
+ case WXK_F13:
+ case WXK_F14:
+ case WXK_F15:
+ case WXK_F16:
+ case WXK_F17:
+ case WXK_F18:
+ case WXK_F19:
+ case WXK_F20:
+ case WXK_F21:
+ case WXK_F22:
+ case WXK_F23:
+ case WXK_F24:
+ case WXK_NUMLOCK:
+ case WXK_SCROLL:
+ case WXK_PAGEUP:
+ case WXK_PAGEDOWN:
+ case WXK_NUMPAD_F1:
+ case WXK_NUMPAD_F2:
+ case WXK_NUMPAD_F3:
+ case WXK_NUMPAD_F4:
+ case WXK_NUMPAD_HOME:
+ case WXK_NUMPAD_LEFT:
+ case WXK_NUMPAD_UP:
+ case WXK_NUMPAD_RIGHT:
+ case WXK_NUMPAD_DOWN:
+ case WXK_NUMPAD_PAGEUP:
+ case WXK_NUMPAD_PAGEDOWN:
+ case WXK_NUMPAD_END:
+ case WXK_NUMPAD_BEGIN:
+ case WXK_NUMPAD_INSERT:
+ case WXK_NUMPAD_DELETE:
+ case WXK_WINDOWS_LEFT:
+ {
+ return;
+ }
+ default:
+ {
+ }
+ }
+
// Must process this before translation, otherwise it's translated into a WXK_DELETE event.
if (event.CmdDown() && event.GetKeyCode() == WXK_BACK)
{
long newPos = m_caretPosition;
- DeleteSelectedContent(& newPos);
+ bool processed = DeleteSelectedContent(& newPos);
// Submit range in character positions, which are greater than caret positions,
// so subtract 1 for deleted character and add 1 for conversion to character position.
if (newPos > -1)
{
- bool processed = false;
if (event.CmdDown())
{
long pos = wxRichTextCtrl::FindNextWordPosition(-1);
return;
}
- if (event.GetKeyCode() == WXK_LEFT ||
- event.GetKeyCode() == WXK_RIGHT ||
- event.GetKeyCode() == WXK_UP ||
- event.GetKeyCode() == WXK_DOWN ||
- event.GetKeyCode() == WXK_HOME ||
- event.GetKeyCode() == WXK_PAGEUP ||
- event.GetKeyCode() == WXK_PAGEDOWN ||
- event.GetKeyCode() == WXK_END ||
-
- event.GetKeyCode() == WXK_NUMPAD_LEFT ||
- event.GetKeyCode() == WXK_NUMPAD_RIGHT ||
- event.GetKeyCode() == WXK_NUMPAD_UP ||
- event.GetKeyCode() == WXK_NUMPAD_DOWN ||
- event.GetKeyCode() == WXK_NUMPAD_HOME ||
- event.GetKeyCode() == WXK_NUMPAD_PAGEUP ||
- event.GetKeyCode() == WXK_NUMPAD_PAGEDOWN ||
- event.GetKeyCode() == WXK_NUMPAD_END)
- {
- KeyboardNavigate(event.GetKeyCode(), flags);
- return;
- }
-
// all the other keys modify the controls contents which shouldn't be
// possible if we're read-only
if ( !IsEditable() )
long newPos = m_caretPosition;
- DeleteSelectedContent(& newPos);
+ bool processed = DeleteSelectedContent(& newPos);
// Submit range in character positions, which are greater than caret positions,
// so subtract 1 for deleted character and add 1 for conversion to character position.
if (newPos > -1)
{
- bool processed = false;
if (event.CmdDown())
{
long pos = wxRichTextCtrl::FindNextWordPosition(-1);
long newPos = m_caretPosition;
- DeleteSelectedContent(& newPos);
+ bool processed = DeleteSelectedContent(& newPos);
// Submit range in character positions, which are greater than caret positions,
if (newPos < GetBuffer().GetRange().GetEnd()+1)
{
- bool processed = false;
if (event.CmdDown())
{
long pos = wxRichTextCtrl::FindNextWordPosition(1);
switch ( keycode )
{
case WXK_ESCAPE:
- case WXK_DELETE:
- case WXK_START:
- case WXK_LBUTTON:
- case WXK_RBUTTON:
- case WXK_CANCEL:
- case WXK_MBUTTON:
- case WXK_CLEAR:
- case WXK_SHIFT:
- case WXK_ALT:
- case WXK_CONTROL:
- case WXK_MENU:
- case WXK_PAUSE:
- case WXK_CAPITAL:
- case WXK_END:
- case WXK_HOME:
- case WXK_LEFT:
- case WXK_UP:
- case WXK_RIGHT:
- case WXK_DOWN:
- case WXK_SELECT:
- case WXK_PRINT:
- case WXK_EXECUTE:
- case WXK_SNAPSHOT:
- case WXK_INSERT:
- case WXK_HELP:
- case WXK_NUMPAD0:
- case WXK_NUMPAD1:
- case WXK_NUMPAD2:
- case WXK_NUMPAD3:
- case WXK_NUMPAD4:
- case WXK_NUMPAD5:
- case WXK_NUMPAD6:
- case WXK_NUMPAD7:
- case WXK_NUMPAD8:
- case WXK_NUMPAD9:
- case WXK_MULTIPLY:
- case WXK_ADD:
- case WXK_SEPARATOR:
- case WXK_SUBTRACT:
- case WXK_DECIMAL:
- case WXK_DIVIDE:
- case WXK_F1:
- case WXK_F2:
- case WXK_F3:
- case WXK_F4:
- case WXK_F5:
- case WXK_F6:
- case WXK_F7:
- case WXK_F8:
- case WXK_F9:
- case WXK_F10:
- case WXK_F11:
- case WXK_F12:
- case WXK_F13:
- case WXK_F14:
- case WXK_F15:
- case WXK_F16:
- case WXK_F17:
- case WXK_F18:
- case WXK_F19:
- case WXK_F20:
- case WXK_F21:
- case WXK_F22:
- case WXK_F23:
- case WXK_F24:
- case WXK_NUMLOCK:
- case WXK_SCROLL:
- case WXK_PAGEUP:
- case WXK_PAGEDOWN:
- case WXK_NUMPAD_SPACE:
- case WXK_NUMPAD_TAB:
- case WXK_NUMPAD_ENTER:
- case WXK_NUMPAD_F1:
- case WXK_NUMPAD_F2:
- case WXK_NUMPAD_F3:
- case WXK_NUMPAD_F4:
- case WXK_NUMPAD_HOME:
- case WXK_NUMPAD_LEFT:
- case WXK_NUMPAD_UP:
- case WXK_NUMPAD_RIGHT:
- case WXK_NUMPAD_DOWN:
- case WXK_NUMPAD_PAGEUP:
- case WXK_NUMPAD_PAGEDOWN:
- case WXK_NUMPAD_END:
- case WXK_NUMPAD_BEGIN:
- case WXK_NUMPAD_INSERT:
- case WXK_NUMPAD_DELETE:
- case WXK_NUMPAD_EQUAL:
- case WXK_NUMPAD_MULTIPLY:
- case WXK_NUMPAD_ADD:
- case WXK_NUMPAD_SEPARATOR:
- case WXK_NUMPAD_SUBTRACT:
- case WXK_NUMPAD_DECIMAL:
- case WXK_WINDOWS_LEFT:
{
event.Skip();
return;
default:
{
+#ifdef __WXMAC__
+ if (event.CmdDown())
+#else
if (event.CmdDown() || event.AltDown())
+#endif
{
event.Skip();
return;