void OnChar(wxKeyEvent& event);
void OnText(wxCommandEvent& event);
+ void OnTextEnter(wxCommandEvent& event);
void OnTextURL(wxTextUrlEvent& event);
void OnTextMaxLen(wxCommandEvent& event);
+ void OnTextCut(wxClipboardTextEvent & event);
+ void OnTextCopy(wxClipboardTextEvent & event);
+ void OnTextPaste(wxClipboardTextEvent & event);
+
void OnMouseEvent(wxMouseEvent& event);
void OnSetFocus(wxFocusEvent& event);
static bool ms_logMouse;
static bool ms_logText;
static bool ms_logFocus;
+ static bool ms_logClip;
private:
static inline wxChar GetChar(bool on, wxChar c) { return on ? c : _T('-'); }
+
void LogKeyEvent(const wxChar *name, wxKeyEvent& event) const;
+ void LogClipEvent(const wxChar *what, wxClipboardTextEvent& event);
bool m_hasCapture;
MyTextCtrl::ms_logFocus = event.IsChecked();
}
+ void OnLogClip(wxCommandEvent& event)
+ {
+ MyTextCtrl::ms_logClip = event.IsChecked();
+ }
+
void OnSetText(wxCommandEvent& WXUNUSED(event))
{
m_panel->m_text->SetValue(_T("Hello, world (what else did you expect)?"));
// clipboard menu
TEXT_CLIPBOARD_COPY = 200,
TEXT_CLIPBOARD_PASTE,
+ TEXT_CLIPBOARD_VETO,
// tooltip menu
TEXT_TOOLTIPS_SETDELAY = 300,
TEXT_LOG_MOUSE,
TEXT_LOG_TEXT,
TEXT_LOG_FOCUS,
+ TEXT_LOG_CLIP,
TEXT_END
};
_T("Copy the selection to the clipboard"));
menuClipboard->Append(TEXT_CLIPBOARD_PASTE, _T("&Paste\tCtrl-Shift-V"),
_T("Paste from clipboard to the text control"));
+ menuClipboard->AppendSeparator();
+ menuClipboard->AppendCheckItem(TEXT_CLIPBOARD_VETO, _T("Vet&o\tCtrl-Shift-O"),
+ _T("Veto all clipboard operations"));
menu_bar->Append(menuClipboard, _T("&Clipboard"));
#endif // wxUSE_CLIPBOARD
menuLog->AppendCheckItem(TEXT_LOG_MOUSE, _T("Log &mouse events"));
menuLog->AppendCheckItem(TEXT_LOG_TEXT, _T("Log &text events"));
menuLog->AppendCheckItem(TEXT_LOG_FOCUS, _T("Log &focus events"));
+ menuLog->AppendCheckItem(TEXT_LOG_CLIP, _T("Log clip&board events"));
menuLog->AppendSeparator();
menuLog->Append(TEXT_CLEAR, _T("&Clear the log\tCtrl-L"),
_T("Clear the log window contents"));
// select only the interesting events by default
- MyTextCtrl::ms_logKey =
- MyTextCtrl::ms_logChar = false;
+ MyTextCtrl::ms_logClip =
MyTextCtrl::ms_logText = true;
menuLog->Check(TEXT_LOG_KEY, MyTextCtrl::ms_logKey);
EVT_CHAR(MyTextCtrl::OnChar)
EVT_TEXT(wxID_ANY, MyTextCtrl::OnText)
+ EVT_TEXT_ENTER(wxID_ANY, MyTextCtrl::OnTextEnter)
EVT_TEXT_URL(wxID_ANY, MyTextCtrl::OnTextURL)
EVT_TEXT_MAXLEN(wxID_ANY, MyTextCtrl::OnTextMaxLen)
+ EVT_TEXT_CUT(wxID_ANY, MyTextCtrl::OnTextCut)
+ EVT_TEXT_COPY(wxID_ANY, MyTextCtrl::OnTextCopy)
+ EVT_TEXT_PASTE(wxID_ANY, MyTextCtrl::OnTextPaste)
EVT_MOUSE_EVENTS(MyTextCtrl::OnMouseEvent)
bool MyTextCtrl::ms_logMouse = false;
bool MyTextCtrl::ms_logText = false;
bool MyTextCtrl::ms_logFocus = false;
+bool MyTextCtrl::ms_logClip = false;
void MyTextCtrl::LogKeyEvent(const wxChar *name, wxKeyEvent& event) const
{
case WXK_MENU: key = _T("MENU"); break;
case WXK_PAUSE: key = _T("PAUSE"); break;
case WXK_CAPITAL: key = _T("CAPITAL"); break;
- case WXK_PRIOR: key = _T("PRIOR"); break;
- case WXK_NEXT: key = _T("NEXT"); break;
case WXK_END: key = _T("END"); break;
case WXK_HOME: key = _T("HOME"); break;
case WXK_LEFT: key = _T("LEFT"); break;
case WXK_NUMPAD_UP: key = _T("NUMPAD_UP"); break;
case WXK_NUMPAD_RIGHT: key = _T("NUMPAD_RIGHT"); break;
case WXK_NUMPAD_DOWN: key = _T("NUMPAD_DOWN"); break;
- case WXK_NUMPAD_PRIOR: key = _T("NUMPAD_PRIOR"); break;
case WXK_NUMPAD_PAGEUP: key = _T("NUMPAD_PAGEUP"); break;
case WXK_NUMPAD_PAGEDOWN: key = _T("NUMPAD_PAGEDOWN"); break;
case WXK_NUMPAD_END: key = _T("NUMPAD_END"); break;
}
void MyTextCtrl::OnText(wxCommandEvent& event)
+{
+ if ( !ms_logText )
+ return;
+
+ MyTextCtrl *win = (MyTextCtrl *)event.GetEventObject();
+ const wxChar *changeVerb = win->IsModified() ? _T("changed")
+ : _T("set by program");
+ const wxChar *data = (const wxChar *)(win->GetClientData());
+ if ( data )
+ {
+ wxLogMessage(_T("Text %s in control \"%s\""), changeVerb, data);
+ }
+ else
+ {
+ wxLogMessage(_T("Text %s in some control"), changeVerb);
+ }
+}
+
+void MyTextCtrl::OnTextEnter(wxCommandEvent& event)
{
if ( !ms_logText )
return;
const wxChar *data = (const wxChar *)(win->GetClientData());
if ( data )
{
- wxLogMessage(_T("Text changed in control '%s'"), data);
+ wxLogMessage(_T("Enter pressed in control '%s'"), data);
}
else
{
- // wxLogMessage( event.GetString() );
- wxLogMessage(_T("Text changed in some control"));
+ wxLogMessage(_T("Enter pressed in some control"));
}
}
wxLogMessage(_T("You can't enter more characters into this control."));
}
+
+void MyTextCtrl::OnTextCut(wxClipboardTextEvent& event)
+{
+ LogClipEvent(_T("cut to"), event);
+}
+
+void MyTextCtrl::OnTextCopy(wxClipboardTextEvent& event)
+{
+ LogClipEvent(_T("copied to"), event);
+}
+
+void MyTextCtrl::OnTextPaste(wxClipboardTextEvent& event)
+{
+ LogClipEvent(_T("pasted from"), event);
+}
+
+void MyTextCtrl::LogClipEvent(const wxChar *what, wxClipboardTextEvent& event)
+{
+ wxFrame *frame = wxDynamicCast(wxGetTopLevelParent(this), wxFrame);
+ wxCHECK_RET( frame, _T("no parent frame?") );
+
+ const bool veto = frame->GetMenuBar()->IsChecked(TEXT_CLIPBOARD_VETO);
+ if ( !veto )
+ event.Skip();
+
+ if ( ms_logClip )
+ {
+ wxLogMessage(_T("Text %s%s the clipboard."),
+ veto ? _T("not ") : _T(""), what);
+ }
+}
+
+
void MyTextCtrl::OnTextURL(wxTextUrlEvent& event)
{
const wxMouseEvent& ev = event.GetMouseEvent();
EVT_MENU(TEXT_LOG_MOUSE,MyFrame::OnLogMouse)
EVT_MENU(TEXT_LOG_TEXT, MyFrame::OnLogText)
EVT_MENU(TEXT_LOG_FOCUS,MyFrame::OnLogFocus)
+ EVT_MENU(TEXT_LOG_CLIP, MyFrame::OnLogClip)
#if wxUSE_LOG
EVT_MENU(TEXT_CLEAR, MyFrame::OnLogClear)
#endif // wxUSE_LOG