added clipboard events (wxEVT_COMMAND_TEXT_COPY/CUT/PASTE) and implemented them for wxMSW
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39141 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -218,6 +218,7 @@ An event object contains information about a specific event. Event handlers
|
|||||||
\twocolitem{\helpref{wxActivateEvent}{wxactivateevent}}{A window or application activation event}
|
\twocolitem{\helpref{wxActivateEvent}{wxactivateevent}}{A window or application activation event}
|
||||||
\twocolitem{\helpref{wxCalendarEvent}{wxcalendarevent}}{Used with \helpref{wxCalendarCtrl}{wxcalendarctrl}}
|
\twocolitem{\helpref{wxCalendarEvent}{wxcalendarevent}}{Used with \helpref{wxCalendarCtrl}{wxcalendarctrl}}
|
||||||
\twocolitem{\helpref{wxCalculateLayoutEvent}{wxcalculatelayoutevent}}{Used to calculate window layout}
|
\twocolitem{\helpref{wxCalculateLayoutEvent}{wxcalculatelayoutevent}}{Used to calculate window layout}
|
||||||
|
\twocolitem{\helpref{wxClipboardTextEvent}{wxclipboardtextevent}}{A clipboard copy/cut/paste treebook event event}
|
||||||
\twocolitem{\helpref{wxCloseEvent}{wxcloseevent}}{A close window or end session event}
|
\twocolitem{\helpref{wxCloseEvent}{wxcloseevent}}{A close window or end session event}
|
||||||
\twocolitem{\helpref{wxCommandEvent}{wxcommandevent}}{An event from a variety of standard controls}
|
\twocolitem{\helpref{wxCommandEvent}{wxcommandevent}}{An event from a variety of standard controls}
|
||||||
\twocolitem{\helpref{wxContextMenuEvent}{wxcontextmenuevent}}{An event generated when the user issues a context menu command}
|
\twocolitem{\helpref{wxContextMenuEvent}{wxcontextmenuevent}}{An event generated when the user issues a context menu command}
|
||||||
|
@@ -39,6 +39,7 @@
|
|||||||
\input clientdc.tex
|
\input clientdc.tex
|
||||||
\input clientdat.tex
|
\input clientdat.tex
|
||||||
\input clipbrd.tex
|
\input clipbrd.tex
|
||||||
|
\input clipevent.tex
|
||||||
\input closeevt.tex
|
\input closeevt.tex
|
||||||
\input cmdlpars.tex
|
\input cmdlpars.tex
|
||||||
\input colour.tex
|
\input colour.tex
|
||||||
|
84
docs/latex/wx/clipevent.tex
Normal file
84
docs/latex/wx/clipevent.tex
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%% Name: clipevent.tex
|
||||||
|
%% Purpose: wxClipboardTextEvent documentation
|
||||||
|
%% Author: Evgeniy Tarassov, Vadim Zeitlin
|
||||||
|
%% Modified by:
|
||||||
|
%% Created: 2005-10-04
|
||||||
|
%% RCS-ID: $Id$
|
||||||
|
%% Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
|
||||||
|
%% License: wxWindows license
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\section{\class{wxClipboardTextEvent}}\label{wxclipboardtextevent}
|
||||||
|
|
||||||
|
This class represents the events generated by a control (typically a
|
||||||
|
\helpref{wxTextCtrl}{wxtextctrl} but other windows can generate these events as
|
||||||
|
well) when its content gets copied or cut to, or pasted from the clipboard.
|
||||||
|
There are three types of corresponding events wxEVT\_COMMAND\_TEXT\_COPY,
|
||||||
|
wxEVT\_COMMAND\_TEXT\_CUT and wxEVT\_COMMAND\_TEXT\_PASTE.
|
||||||
|
|
||||||
|
If any of these events is processed (without being skipped) by an event
|
||||||
|
handler, the corresponding operation doesn't take place which allows to prevent
|
||||||
|
the text from being copied from or pasted to a control. It is also possible to
|
||||||
|
examine the clipboard contents in the PASTE event handler and transform it in
|
||||||
|
some way before inserting in a control -- for example, changing its case or
|
||||||
|
removing invalid characters.
|
||||||
|
|
||||||
|
Finally notice that a CUT event is always preceded by the COPY event which
|
||||||
|
makes it possible to only process the latter if it doesn't matter if the text
|
||||||
|
was copied or cut.
|
||||||
|
|
||||||
|
\wxheading{Remarks}
|
||||||
|
|
||||||
|
These events are currently only generated by \helpref{wxComboBox}{wxcombobox} and
|
||||||
|
under Windows and \helpref{wxTextCtrl}{wxtextctrl} under Windows and GTK and
|
||||||
|
are not generated for the text controls with \texttt{wxTE\_RICH} style under
|
||||||
|
Windows.
|
||||||
|
|
||||||
|
|
||||||
|
\wxheading{Derived from}
|
||||||
|
|
||||||
|
\helpref{wxCommandEvent}{wxcommandevent}\\
|
||||||
|
\helpref{wxEvent}{wxevent}\\
|
||||||
|
\helpref{wxObject}{wxobject}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\wxheading{Include files}
|
||||||
|
|
||||||
|
<wx/event.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\wxheading{Event handling}
|
||||||
|
|
||||||
|
To process this type of events use the following event handling macros. The
|
||||||
|
\arg{func} parameter must be a member functions that takes an argument of type
|
||||||
|
\texttt{wxClipboardTextEvent \&}.
|
||||||
|
|
||||||
|
\twocolwidtha{10cm}
|
||||||
|
\begin{twocollist}\itemsep=0pt
|
||||||
|
\twocolitem{{\bf EVT\_TEXT\_COPY(id, func)}}{Some or all of the controls
|
||||||
|
content was copied to the clipboard.}
|
||||||
|
\twocolitem{{\bf EVT\_TEXT\_CUT(id, func)}}{Some or all of the controls content
|
||||||
|
was cut (i.e. copied and deleted).}
|
||||||
|
\twocolitem{{\bf EVT\_TEXT\_PASTE(id, func)}}{Clipboard content was pasted into
|
||||||
|
the control.}
|
||||||
|
\end{twocollist}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\wxheading{See also}
|
||||||
|
|
||||||
|
\helpref{wxClipboard}{wxclipboard}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\latexignore{\rtfignore{\wxheading{Members}}}
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxClipboardTextEvent::wxClipboardTextEvent}\label{wxclipboardtexteventwxclipboardtextevent}
|
||||||
|
|
||||||
|
\func{}{wxClipboardTextEvent}{\param{wxEventType }{commandType = wxEVT\_NULL}, \param{int }{id = 0}}
|
||||||
|
|
||||||
|
|
@@ -267,6 +267,11 @@ BEGIN_DECLARE_EVENT_TYPES()
|
|||||||
DECLARE_EVENT_TYPE(wxEVT_MOVING, 442)
|
DECLARE_EVENT_TYPE(wxEVT_MOVING, 442)
|
||||||
DECLARE_EVENT_TYPE(wxEVT_HIBERNATE, 443)
|
DECLARE_EVENT_TYPE(wxEVT_HIBERNATE, 443)
|
||||||
|
|
||||||
|
// Clipboard events
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_COPY, 444)
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_CUT, 445)
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_PASTE, 446)
|
||||||
|
|
||||||
// Generic command events
|
// Generic command events
|
||||||
// Note: a click is a higher-level event than button down/up
|
// Note: a click is a higher-level event than button down/up
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LEFT_CLICK, 500)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LEFT_CLICK, 500)
|
||||||
@@ -2014,6 +2019,34 @@ private:
|
|||||||
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHelpEvent)
|
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHelpEvent)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// A Clipboard Text event is sent when a window intercepts text copy/cut/paste
|
||||||
|
// message, i.e. the user has cut/copied/pasted data from/into a text control
|
||||||
|
// via ctrl-C/X/V, ctrl/shift-del/insert, a popup menu command, etc.
|
||||||
|
// NOTE : under windows these events are *NOT* generated automatically
|
||||||
|
// for a Rich Edit text control.
|
||||||
|
/*
|
||||||
|
wxEVT_COMMAND_TEXT_COPY
|
||||||
|
wxEVT_COMMAND_TEXT_CUT
|
||||||
|
wxEVT_COMMAND_TEXT_PASTE
|
||||||
|
*/
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_CORE wxClipboardTextEvent : public wxCommandEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxClipboardTextEvent(wxEventType type = wxEVT_NULL,
|
||||||
|
wxWindowID winid = 0)
|
||||||
|
: wxCommandEvent(type, winid)
|
||||||
|
{ }
|
||||||
|
wxClipboardTextEvent(const wxClipboardTextEvent & event)
|
||||||
|
: wxCommandEvent(event)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual wxEvent *Clone() const { return new wxClipboardTextEvent(*this); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxClipboardTextEvent)
|
||||||
|
};
|
||||||
|
|
||||||
// A Context event is sent when the user right clicks on a window or
|
// A Context event is sent when the user right clicks on a window or
|
||||||
// presses Shift-F10
|
// presses Shift-F10
|
||||||
// NOTE : Under windows this is a repackaged WM_CONTETXMENU message
|
// NOTE : Under windows this is a repackaged WM_CONTETXMENU message
|
||||||
@@ -2531,6 +2564,7 @@ typedef void (wxEvtHandler::*wxNotifyEventFunction)(wxNotifyEvent&);
|
|||||||
typedef void (wxEvtHandler::*wxHelpEventFunction)(wxHelpEvent&);
|
typedef void (wxEvtHandler::*wxHelpEventFunction)(wxHelpEvent&);
|
||||||
typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&);
|
typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&);
|
||||||
typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureChangedEvent&);
|
typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureChangedEvent&);
|
||||||
|
typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&);
|
||||||
|
|
||||||
// these typedefs don't have the same name structure as the others, keep for
|
// these typedefs don't have the same name structure as the others, keep for
|
||||||
// backwards compatibility only
|
// backwards compatibility only
|
||||||
@@ -2611,6 +2645,8 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
|
|||||||
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxContextMenuEventFunction, &func)
|
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxContextMenuEventFunction, &func)
|
||||||
#define wxMouseCaptureChangedEventHandler(func) \
|
#define wxMouseCaptureChangedEventHandler(func) \
|
||||||
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMouseCaptureChangedEventFunction, &func)
|
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMouseCaptureChangedEventFunction, &func)
|
||||||
|
#define wxClipboardTextEventHandler(func) \
|
||||||
|
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxClipboardTextEventFunction, &func)
|
||||||
|
|
||||||
#endif // wxUSE_GUI
|
#endif // wxUSE_GUI
|
||||||
|
|
||||||
@@ -3002,6 +3038,11 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
|
|||||||
#define EVT_CONTEXT_MENU(func) wx__DECLARE_EVT0(wxEVT_CONTEXT_MENU, wxContextMenuEventHandler(func))
|
#define EVT_CONTEXT_MENU(func) wx__DECLARE_EVT0(wxEVT_CONTEXT_MENU, wxContextMenuEventHandler(func))
|
||||||
#define EVT_COMMAND_CONTEXT_MENU(winid, func) wx__DECLARE_EVT1(wxEVT_CONTEXT_MENU, winid, wxContextMenuEventHandler(func))
|
#define EVT_COMMAND_CONTEXT_MENU(winid, func) wx__DECLARE_EVT1(wxEVT_CONTEXT_MENU, winid, wxContextMenuEventHandler(func))
|
||||||
|
|
||||||
|
// Clipboard text Events
|
||||||
|
#define EVT_TEXT_CUT(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_CUT, winid, wxClipboardTextEventHandler(func))
|
||||||
|
#define EVT_TEXT_COPY(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_COPY, winid, wxClipboardTextEventHandler(func))
|
||||||
|
#define EVT_TEXT_PASTE(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_PASTE, winid, wxClipboardTextEventHandler(func))
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Global data
|
// Global data
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -332,6 +332,8 @@ public:
|
|||||||
#ifdef __WIN32__
|
#ifdef __WIN32__
|
||||||
int HandleMenuChar(int chAccel, WXLPARAM lParam);
|
int HandleMenuChar(int chAccel, WXLPARAM lParam);
|
||||||
#endif
|
#endif
|
||||||
|
// Create and process a clipboard event specified by type.
|
||||||
|
bool HandleClipboardEvent( WXUINT nMsg );
|
||||||
|
|
||||||
bool HandleQueryDragIcon(WXHICON *hIcon);
|
bool HandleQueryDragIcon(WXHICON *hIcon);
|
||||||
|
|
||||||
|
@@ -75,6 +75,10 @@ public:
|
|||||||
void OnTextURL(wxTextUrlEvent& event);
|
void OnTextURL(wxTextUrlEvent& event);
|
||||||
void OnTextMaxLen(wxCommandEvent& event);
|
void OnTextMaxLen(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void OnTextCut(wxClipboardTextEvent & event);
|
||||||
|
void OnTextCopy(wxClipboardTextEvent & event);
|
||||||
|
void OnTextPaste(wxClipboardTextEvent & event);
|
||||||
|
|
||||||
void OnMouseEvent(wxMouseEvent& event);
|
void OnMouseEvent(wxMouseEvent& event);
|
||||||
|
|
||||||
void OnSetFocus(wxFocusEvent& event);
|
void OnSetFocus(wxFocusEvent& event);
|
||||||
@@ -85,10 +89,13 @@ public:
|
|||||||
static bool ms_logMouse;
|
static bool ms_logMouse;
|
||||||
static bool ms_logText;
|
static bool ms_logText;
|
||||||
static bool ms_logFocus;
|
static bool ms_logFocus;
|
||||||
|
static bool ms_logClip;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static inline wxChar GetChar(bool on, wxChar c) { return on ? c : _T('-'); }
|
static inline wxChar GetChar(bool on, wxChar c) { return on ? c : _T('-'); }
|
||||||
|
|
||||||
void LogKeyEvent(const wxChar *name, wxKeyEvent& event) const;
|
void LogKeyEvent(const wxChar *name, wxKeyEvent& event) const;
|
||||||
|
void LogClipEvent(const wxChar *what, wxClipboardTextEvent& event);
|
||||||
|
|
||||||
bool m_hasCapture;
|
bool m_hasCapture;
|
||||||
|
|
||||||
@@ -282,6 +289,11 @@ public:
|
|||||||
MyTextCtrl::ms_logFocus = event.IsChecked();
|
MyTextCtrl::ms_logFocus = event.IsChecked();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnLogClip(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
MyTextCtrl::ms_logClip = event.IsChecked();
|
||||||
|
}
|
||||||
|
|
||||||
void OnSetText(wxCommandEvent& WXUNUSED(event))
|
void OnSetText(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
m_panel->m_text->SetValue(_T("Hello, world (what else did you expect)?"));
|
m_panel->m_text->SetValue(_T("Hello, world (what else did you expect)?"));
|
||||||
@@ -366,6 +378,7 @@ enum
|
|||||||
// clipboard menu
|
// clipboard menu
|
||||||
TEXT_CLIPBOARD_COPY = 200,
|
TEXT_CLIPBOARD_COPY = 200,
|
||||||
TEXT_CLIPBOARD_PASTE,
|
TEXT_CLIPBOARD_PASTE,
|
||||||
|
TEXT_CLIPBOARD_VETO,
|
||||||
|
|
||||||
// tooltip menu
|
// tooltip menu
|
||||||
TEXT_TOOLTIPS_SETDELAY = 300,
|
TEXT_TOOLTIPS_SETDELAY = 300,
|
||||||
@@ -397,6 +410,7 @@ enum
|
|||||||
TEXT_LOG_MOUSE,
|
TEXT_LOG_MOUSE,
|
||||||
TEXT_LOG_TEXT,
|
TEXT_LOG_TEXT,
|
||||||
TEXT_LOG_FOCUS,
|
TEXT_LOG_FOCUS,
|
||||||
|
TEXT_LOG_CLIP,
|
||||||
|
|
||||||
TEXT_END
|
TEXT_END
|
||||||
};
|
};
|
||||||
@@ -441,6 +455,9 @@ bool MyApp::OnInit()
|
|||||||
_T("Copy the selection to the clipboard"));
|
_T("Copy the selection to the clipboard"));
|
||||||
menuClipboard->Append(TEXT_CLIPBOARD_PASTE, _T("&Paste\tCtrl-Shift-V"),
|
menuClipboard->Append(TEXT_CLIPBOARD_PASTE, _T("&Paste\tCtrl-Shift-V"),
|
||||||
_T("Paste from clipboard to the text control"));
|
_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"));
|
menu_bar->Append(menuClipboard, _T("&Clipboard"));
|
||||||
#endif // wxUSE_CLIPBOARD
|
#endif // wxUSE_CLIPBOARD
|
||||||
|
|
||||||
@@ -475,13 +492,13 @@ bool MyApp::OnInit()
|
|||||||
menuLog->AppendCheckItem(TEXT_LOG_MOUSE, _T("Log &mouse events"));
|
menuLog->AppendCheckItem(TEXT_LOG_MOUSE, _T("Log &mouse events"));
|
||||||
menuLog->AppendCheckItem(TEXT_LOG_TEXT, _T("Log &text events"));
|
menuLog->AppendCheckItem(TEXT_LOG_TEXT, _T("Log &text events"));
|
||||||
menuLog->AppendCheckItem(TEXT_LOG_FOCUS, _T("Log &focus events"));
|
menuLog->AppendCheckItem(TEXT_LOG_FOCUS, _T("Log &focus events"));
|
||||||
|
menuLog->AppendCheckItem(TEXT_LOG_CLIP, _T("Log clip&board events"));
|
||||||
menuLog->AppendSeparator();
|
menuLog->AppendSeparator();
|
||||||
menuLog->Append(TEXT_CLEAR, _T("&Clear the log\tCtrl-L"),
|
menuLog->Append(TEXT_CLEAR, _T("&Clear the log\tCtrl-L"),
|
||||||
_T("Clear the log window contents"));
|
_T("Clear the log window contents"));
|
||||||
|
|
||||||
// select only the interesting events by default
|
// select only the interesting events by default
|
||||||
MyTextCtrl::ms_logKey =
|
MyTextCtrl::ms_logClip =
|
||||||
MyTextCtrl::ms_logChar = false;
|
|
||||||
MyTextCtrl::ms_logText = true;
|
MyTextCtrl::ms_logText = true;
|
||||||
|
|
||||||
menuLog->Check(TEXT_LOG_KEY, MyTextCtrl::ms_logKey);
|
menuLog->Check(TEXT_LOG_KEY, MyTextCtrl::ms_logKey);
|
||||||
@@ -514,6 +531,9 @@ BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
|
|||||||
EVT_TEXT_ENTER(wxID_ANY, MyTextCtrl::OnTextEnter)
|
EVT_TEXT_ENTER(wxID_ANY, MyTextCtrl::OnTextEnter)
|
||||||
EVT_TEXT_URL(wxID_ANY, MyTextCtrl::OnTextURL)
|
EVT_TEXT_URL(wxID_ANY, MyTextCtrl::OnTextURL)
|
||||||
EVT_TEXT_MAXLEN(wxID_ANY, MyTextCtrl::OnTextMaxLen)
|
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)
|
EVT_MOUSE_EVENTS(MyTextCtrl::OnMouseEvent)
|
||||||
|
|
||||||
@@ -526,6 +546,7 @@ bool MyTextCtrl::ms_logChar = false;
|
|||||||
bool MyTextCtrl::ms_logMouse = false;
|
bool MyTextCtrl::ms_logMouse = false;
|
||||||
bool MyTextCtrl::ms_logText = false;
|
bool MyTextCtrl::ms_logText = false;
|
||||||
bool MyTextCtrl::ms_logFocus = false;
|
bool MyTextCtrl::ms_logFocus = false;
|
||||||
|
bool MyTextCtrl::ms_logClip = false;
|
||||||
|
|
||||||
void MyTextCtrl::LogKeyEvent(const wxChar *name, wxKeyEvent& event) const
|
void MyTextCtrl::LogKeyEvent(const wxChar *name, wxKeyEvent& event) const
|
||||||
{
|
{
|
||||||
@@ -795,6 +816,39 @@ void MyTextCtrl::OnTextMaxLen(wxCommandEvent& WXUNUSED(event))
|
|||||||
wxLogMessage(_T("You can't enter more characters into this 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)
|
void MyTextCtrl::OnTextURL(wxTextUrlEvent& event)
|
||||||
{
|
{
|
||||||
const wxMouseEvent& ev = event.GetMouseEvent();
|
const wxMouseEvent& ev = event.GetMouseEvent();
|
||||||
@@ -1237,6 +1291,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_MENU(TEXT_LOG_MOUSE,MyFrame::OnLogMouse)
|
EVT_MENU(TEXT_LOG_MOUSE,MyFrame::OnLogMouse)
|
||||||
EVT_MENU(TEXT_LOG_TEXT, MyFrame::OnLogText)
|
EVT_MENU(TEXT_LOG_TEXT, MyFrame::OnLogText)
|
||||||
EVT_MENU(TEXT_LOG_FOCUS,MyFrame::OnLogFocus)
|
EVT_MENU(TEXT_LOG_FOCUS,MyFrame::OnLogFocus)
|
||||||
|
EVT_MENU(TEXT_LOG_CLIP, MyFrame::OnLogClip)
|
||||||
#if wxUSE_LOG
|
#if wxUSE_LOG
|
||||||
EVT_MENU(TEXT_CLEAR, MyFrame::OnLogClear)
|
EVT_MENU(TEXT_CLEAR, MyFrame::OnLogClear)
|
||||||
#endif // wxUSE_LOG
|
#endif // wxUSE_LOG
|
||||||
|
@@ -92,6 +92,7 @@
|
|||||||
IMPLEMENT_DYNAMIC_CLASS(wxHelpEvent, wxCommandEvent)
|
IMPLEMENT_DYNAMIC_CLASS(wxHelpEvent, wxCommandEvent)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxContextMenuEvent, wxCommandEvent)
|
IMPLEMENT_DYNAMIC_CLASS(wxContextMenuEvent, wxCommandEvent)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxMouseCaptureChangedEvent, wxEvent)
|
IMPLEMENT_DYNAMIC_CLASS(wxMouseCaptureChangedEvent, wxEvent)
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxClipboardTextEvent, wxCommandEvent)
|
||||||
#endif // wxUSE_GUI
|
#endif // wxUSE_GUI
|
||||||
|
|
||||||
#if wxUSE_BASE
|
#if wxUSE_BASE
|
||||||
@@ -288,6 +289,11 @@ DEFINE_EVENT_TYPE(wxEVT_COMPARE_ITEM)
|
|||||||
DEFINE_EVENT_TYPE(wxEVT_INIT_DIALOG)
|
DEFINE_EVENT_TYPE(wxEVT_INIT_DIALOG)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_UPDATE_UI)
|
DEFINE_EVENT_TYPE(wxEVT_UPDATE_UI)
|
||||||
|
|
||||||
|
// Clipboard events
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_COPY)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_CUT)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_PASTE)
|
||||||
|
|
||||||
// Generic command events
|
// Generic command events
|
||||||
// Note: a click is a higher-level event than button down/up
|
// Note: a click is a higher-level event than button down/up
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LEFT_CLICK)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LEFT_CLICK)
|
||||||
|
@@ -207,6 +207,13 @@ LRESULT APIENTRY _EXPORT wxComboEditWndProc(HWND hWnd,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_CUT:
|
||||||
|
case WM_COPY:
|
||||||
|
case WM_PASTE:
|
||||||
|
if( win->HandleClipboardEvent( message ) )
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ::CallWindowProc(CASTWNDPROC gs_wndprocEdit, hWnd, message, wParam, lParam);
|
return ::CallWindowProc(CASTWNDPROC gs_wndprocEdit, hWnd, message, wParam, lParam);
|
||||||
|
@@ -258,10 +258,49 @@ BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
|
|||||||
EVT_SET_FOCUS(wxTextCtrl::OnSetFocus)
|
EVT_SET_FOCUS(wxTextCtrl::OnSetFocus)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// function prototypes
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
LRESULT APIENTRY _EXPORT wxTextCtrlWndProc(HWND hWnd,
|
||||||
|
UINT message,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam);
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// global vars
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// the pointer to standard text control wnd proc
|
||||||
|
static WNDPROC gs_wndprocEdit = (WNDPROC)NULL;
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wnd proc for subclassed edit control
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
LRESULT APIENTRY _EXPORT wxTextCtrlWndProc(HWND hWnd,
|
||||||
|
UINT message,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
wxWindow *win = wxFindWinFromHandle((WXHWND)hWnd);
|
||||||
|
|
||||||
|
switch ( message )
|
||||||
|
{
|
||||||
|
case WM_CUT:
|
||||||
|
case WM_COPY:
|
||||||
|
case WM_PASTE:
|
||||||
|
if( win->HandleClipboardEvent( message ) )
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ::CallWindowProc(CASTWNDPROC gs_wndprocEdit, hWnd, message, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// creation
|
// creation
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -479,6 +518,9 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
|
|
||||||
|
gs_wndprocEdit = wxSetWindowProc((HWND)GetHwnd(),
|
||||||
|
wxTextCtrlWndProc);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -5053,6 +5053,18 @@ int wxWindowMSW::HandleMenuChar(int WXUNUSED_IN_WINCE(chAccel),
|
|||||||
return wxNOT_FOUND;
|
return wxNOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxWindowMSW::HandleClipboardEvent( WXUINT nMsg )
|
||||||
|
{
|
||||||
|
const wxEventType type = ( nMsg == WM_CUT ) ? wxEVT_COMMAND_TEXT_CUT :
|
||||||
|
( nMsg == WM_COPY ) ? wxEVT_COMMAND_TEXT_COPY :
|
||||||
|
/*( nMsg == WM_PASTE ) ? */ wxEVT_COMMAND_TEXT_PASTE;
|
||||||
|
wxClipboardTextEvent evt(type, GetId());
|
||||||
|
|
||||||
|
evt.SetEventObject(this);
|
||||||
|
|
||||||
|
return GetEventHandler()->ProcessEvent(evt);
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// joystick
|
// joystick
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user