1. added wxTE_AUTO_URL style and support for it under Win32 (and brief
mention in docs and tests in the sample) 2. moved wxTextCtrl-specific stuff from defs.h/event.h to textctrl.h git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11209 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -30,6 +30,12 @@ you can still use Ctrl-Enter to pass to the next control from the keyboard.}
|
|||||||
\twocolitem{\windowstyle{wxTE\_MULTILINE}}{The text control allows multiple lines.}
|
\twocolitem{\windowstyle{wxTE\_MULTILINE}}{The text control allows multiple lines.}
|
||||||
\twocolitem{\windowstyle{wxTE\_PASSWORD}}{The text will be echoed as asterisks.}
|
\twocolitem{\windowstyle{wxTE\_PASSWORD}}{The text will be echoed as asterisks.}
|
||||||
\twocolitem{\windowstyle{wxTE\_READONLY}}{The text will not be user-editable.}
|
\twocolitem{\windowstyle{wxTE\_READONLY}}{The text will not be user-editable.}
|
||||||
|
\twocolitem{\windowstyle{wxTE\_RICH}}{Use rich text control under Win32, this
|
||||||
|
allows to have more than 64Kb of text in the control even under Win9x. This
|
||||||
|
style is ignored under other platforms.}
|
||||||
|
\twocolitem{\windowstyle{wxTE\_AUTO\_URL}}{Highlight the URLs and generate the
|
||||||
|
wxTextUrlEvents when mouse events occur over them. This style is supported
|
||||||
|
under Win32 only and requires wxTE\_RICH.}
|
||||||
\twocolitem{\windowstyle{wxHSCROLL}}{A horizontal scrollbar will be created. No effect under GTK+.}
|
\twocolitem{\windowstyle{wxHSCROLL}}{A horizontal scrollbar will be created. No effect under GTK+.}
|
||||||
\end{twocollist}
|
\end{twocollist}
|
||||||
|
|
||||||
@@ -55,8 +61,10 @@ the following:
|
|||||||
If your compiler does not support derivation from {\bf streambuf} and gives a compile error, define the symbol
|
If your compiler does not support derivation from {\bf streambuf} and gives a compile error, define the symbol
|
||||||
{\bf NO\_TEXT\_WINDOW\_STREAM} in the wxTextCtrl header file.
|
{\bf NO\_TEXT\_WINDOW\_STREAM} in the wxTextCtrl header file.
|
||||||
|
|
||||||
Note that any use of C++ iostreams (including this one) deprecated and might get completely removed
|
% VZ: it is wrong to say that C++ iostreams are deprecated, we need a better
|
||||||
in the future.
|
% wording here - disabling this for now
|
||||||
|
%Note that any use of C++ iostreams (including this one) is deprecated and might
|
||||||
|
%get completely removed in the future.
|
||||||
|
|
||||||
\wxheading{Event handling}
|
\wxheading{Event handling}
|
||||||
|
|
||||||
@@ -122,9 +130,10 @@ controls don't have a horizontal scrollbar, the text is automatically scrolled
|
|||||||
so that the \helpref{insertion point}{wxtextctrlgetinsertionpoint} is always
|
so that the \helpref{insertion point}{wxtextctrlgetinsertionpoint} is always
|
||||||
visible.
|
visible.
|
||||||
|
|
||||||
Under Windows, if the {\bf wxTE\_MULTILINE} style is used, the window is implemented
|
% VZ: this is no longer true
|
||||||
as a Windows rich text control with unlimited capacity. Otherwise, normal edit control limits
|
%Under Windows, if the {\bf wxTE\_MULTILINE} style is used, the window is implemented
|
||||||
apply.
|
%as a Windows rich text control with unlimited capacity. Otherwise, normal edit control limits
|
||||||
|
%apply.
|
||||||
|
|
||||||
\wxheading{See also}
|
\wxheading{See also}
|
||||||
|
|
||||||
|
@@ -1092,22 +1092,6 @@ enum wxBorder
|
|||||||
#define wxLB_HSCROLL wxHSCROLL
|
#define wxLB_HSCROLL wxHSCROLL
|
||||||
// always show an entire number of rows
|
// always show an entire number of rows
|
||||||
#define wxLB_INT_HEIGHT 0x0800
|
#define wxLB_INT_HEIGHT 0x0800
|
||||||
/*
|
|
||||||
* wxTextCtrl style flags
|
|
||||||
*/
|
|
||||||
// the flag bits 0x0001, 2, 4 and 8 are free but should be used only for the
|
|
||||||
// things which don't make sense for a text control used by wxTextEntryDialog
|
|
||||||
// because they would otherwise conflict with wxOK, wxCANCEL, wxCENTRE
|
|
||||||
#define wxTE_READONLY 0x0010
|
|
||||||
#define wxTE_MULTILINE 0x0020
|
|
||||||
#define wxTE_PROCESS_TAB 0x0040
|
|
||||||
// this style means to use RICHEDIT control and does something only under wxMSW
|
|
||||||
// and Win32 and is silently ignored under all other platforms
|
|
||||||
#define wxTE_RICH 0x0080
|
|
||||||
#define wxTE_NO_VSCROLL 0x0100
|
|
||||||
#define wxTE_AUTO_SCROLL 0x0200
|
|
||||||
#define wxTE_PROCESS_ENTER 0x0400
|
|
||||||
#define wxTE_PASSWORD 0x0800
|
|
||||||
|
|
||||||
// use wxHSCROLL to not wrap text at all, wxTE_LINEWRAP to wrap it at any
|
// use wxHSCROLL to not wrap text at all, wxTE_LINEWRAP to wrap it at any
|
||||||
// position and wxTE_WORDWRAP to wrap at words boundary
|
// position and wxTE_WORDWRAP to wrap at words boundary
|
||||||
|
@@ -104,7 +104,7 @@ BEGIN_DECLARE_EVENT_TYPES()
|
|||||||
#else // !WXWIN_COMPATIBILITY_EVENT_TYPES
|
#else // !WXWIN_COMPATIBILITY_EVENT_TYPES
|
||||||
// it is important to still have these as constants to avoid
|
// it is important to still have these as constants to avoid
|
||||||
// initialization order related problems
|
// initialization order related problems
|
||||||
DECLARE_EVENT_TYPE(wxEVT_NULL,0);
|
DECLARE_EVENT_TYPE(wxEVT_NULL,0);
|
||||||
const wxEventType wxEVT_FIRST = 10000;
|
const wxEventType wxEVT_FIRST = 10000;
|
||||||
const wxEventType wxEVT_USER_FIRST = wxEVT_FIRST + 2000;
|
const wxEventType wxEVT_USER_FIRST = wxEVT_FIRST + 2000;
|
||||||
#endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES
|
#endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES
|
||||||
@@ -115,8 +115,10 @@ BEGIN_DECLARE_EVENT_TYPES()
|
|||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_SELECTED, 4)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_SELECTED, 4)
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, 5)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, 5)
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, 6)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, 6)
|
||||||
|
/* now in wx/textctrl.h
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED, 7)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED, 7)
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER, 8)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER, 8)
|
||||||
|
*/
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_MENU_SELECTED, 9)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_MENU_SELECTED, 9)
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_SLIDER_UPDATED, 10)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_SLIDER_UPDATED, 10)
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_RADIOBOX_SELECTED, 11)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_RADIOBOX_SELECTED, 11)
|
||||||
@@ -1930,8 +1932,6 @@ typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&);
|
|||||||
#define EVT_CHOICE(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHOICE_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_CHOICE(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHOICE_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
||||||
#define EVT_LISTBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_LISTBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
||||||
#define EVT_LISTBOX_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_LISTBOX_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
||||||
#define EVT_TEXT(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TEXT_UPDATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
|
||||||
#define EVT_TEXT_ENTER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TEXT_ENTER, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
|
||||||
#define EVT_MENU(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_MENU(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
||||||
#define EVT_MENU_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_MENU_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
||||||
#define EVT_SLIDER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SLIDER_UPDATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_SLIDER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SLIDER_UPDATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
||||||
|
@@ -131,6 +131,8 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if wxUSE_RICHEDIT
|
#if wxUSE_RICHEDIT
|
||||||
|
virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
|
||||||
|
|
||||||
bool IsRich() const { return m_isRich; }
|
bool IsRich() const { return m_isRich; }
|
||||||
void SetRichEdit(bool isRich) { m_isRich = isRich; }
|
void SetRichEdit(bool isRich) { m_isRich = isRich; }
|
||||||
|
|
||||||
|
@@ -59,6 +59,31 @@ class WXDLLEXPORT wxTextCtrl;
|
|||||||
WXDLLEXPORT_DATA(extern const wxChar*) wxTextCtrlNameStr;
|
WXDLLEXPORT_DATA(extern const wxChar*) wxTextCtrlNameStr;
|
||||||
WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString;
|
WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxTextCtrl style flags
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// the flag bits 0x0001, 2, 4 and 8 are free but should be used only for the
|
||||||
|
// things which don't make sense for a text control used by wxTextEntryDialog
|
||||||
|
// because they would otherwise conflict with wxOK, wxCANCEL, wxCENTRE
|
||||||
|
#define wxTE_READONLY 0x0010
|
||||||
|
#define wxTE_MULTILINE 0x0020
|
||||||
|
#define wxTE_PROCESS_TAB 0x0040
|
||||||
|
|
||||||
|
// this style means to use RICHEDIT control and does something only under wxMSW
|
||||||
|
// and Win32 and is silently ignored under all other platforms
|
||||||
|
#define wxTE_RICH 0x0080
|
||||||
|
#define wxTE_NO_VSCROLL 0x0100
|
||||||
|
#define wxTE_AUTO_SCROLL 0x0200
|
||||||
|
#define wxTE_PROCESS_ENTER 0x0400
|
||||||
|
#define wxTE_PASSWORD 0x0800
|
||||||
|
|
||||||
|
// automatically detect the URLs and generate the events when mouse is
|
||||||
|
// moved/clicked over an URL
|
||||||
|
//
|
||||||
|
// this is for Win32 richedit controls only so far
|
||||||
|
#define wxTE_AUTO_URL 0x1000
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxTextAttr: a structure containing the visual attributes of a text
|
// wxTextAttr: a structure containing the visual attributes of a text
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -254,6 +279,56 @@ private:
|
|||||||
#include "wx/stubs/textctrl.h"
|
#include "wx/stubs/textctrl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxTextCtrl events
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BEGIN_DECLARE_EVENT_TYPES()
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED, 7)
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER, 8)
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL, 13)
|
||||||
|
END_DECLARE_EVENT_TYPES()
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxTextUrlEvent : public wxCommandEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxTextUrlEvent(int id, const wxMouseEvent& evtMouse,
|
||||||
|
long start, long end)
|
||||||
|
: wxCommandEvent(wxEVT_COMMAND_TEXT_URL, id),
|
||||||
|
m_evtMouse(evtMouse)
|
||||||
|
{ m_start = start; m_end = end; }
|
||||||
|
|
||||||
|
// get the mouse event which happend over the URL
|
||||||
|
const wxMouseEvent& GetMouseEvent() const { return m_evtMouse; }
|
||||||
|
|
||||||
|
// get the start of the URL
|
||||||
|
long GetURLStart() const { return m_start; }
|
||||||
|
|
||||||
|
// get the end of the URL
|
||||||
|
long GetURLEnd() const { return m_end; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// the corresponding mouse event
|
||||||
|
wxMouseEvent m_evtMouse;
|
||||||
|
|
||||||
|
// the start and end indices of the URL in the text control
|
||||||
|
long m_start,
|
||||||
|
m_end;
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxTextUrlEvent)
|
||||||
|
|
||||||
|
public:
|
||||||
|
// for wxWin RTTI only, don't use
|
||||||
|
wxTextUrlEvent() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef void (wxEvtHandler::*wxTextUrlEventFunction)(wxTextUrlEvent&);
|
||||||
|
|
||||||
|
#define EVT_TEXT(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TEXT_UPDATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
||||||
|
#define EVT_TEXT_ENTER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TEXT_ENTER, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
|
||||||
|
#define EVT_TEXT_URL(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TEXT_URL, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxTextUrlEventFunction) & fn, (wxObject *) NULL ),
|
||||||
|
|
||||||
#endif // wxUSE_TEXTCTRL
|
#endif // wxUSE_TEXTCTRL
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -67,6 +67,7 @@ public:
|
|||||||
void OnKeyUp(wxKeyEvent& event);
|
void OnKeyUp(wxKeyEvent& event);
|
||||||
void OnChar(wxKeyEvent& event);
|
void OnChar(wxKeyEvent& event);
|
||||||
void OnText(wxCommandEvent& event);
|
void OnText(wxCommandEvent& event);
|
||||||
|
void OnTextURL(wxTextUrlEvent& event);
|
||||||
void OnMouseEvent(wxMouseEvent& event);
|
void OnMouseEvent(wxMouseEvent& event);
|
||||||
|
|
||||||
bool m_hasCapture;
|
bool m_hasCapture;
|
||||||
@@ -275,6 +276,7 @@ BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
|
|||||||
EVT_KEY_UP(MyTextCtrl::OnKeyUp)
|
EVT_KEY_UP(MyTextCtrl::OnKeyUp)
|
||||||
EVT_CHAR(MyTextCtrl::OnChar)
|
EVT_CHAR(MyTextCtrl::OnChar)
|
||||||
EVT_TEXT(-1, MyTextCtrl::OnText)
|
EVT_TEXT(-1, MyTextCtrl::OnText)
|
||||||
|
EVT_TEXT_URL(-1, MyTextCtrl::OnTextURL)
|
||||||
EVT_MOUSE_EVENTS(MyTextCtrl::OnMouseEvent)
|
EVT_MOUSE_EVENTS(MyTextCtrl::OnMouseEvent)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
@@ -406,6 +408,40 @@ void MyTextCtrl::LogEvent(const wxChar *name, wxKeyEvent& event) const
|
|||||||
GetChar( event.MetaDown(), _T('M') ) );
|
GetChar( event.MetaDown(), _T('M') ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static wxString GetMouseEventDesc(const wxMouseEvent& ev)
|
||||||
|
{
|
||||||
|
// click event
|
||||||
|
wxString button;
|
||||||
|
bool dbl, up;
|
||||||
|
if ( ev.LeftDown() || ev.LeftUp() || ev.LeftDClick() )
|
||||||
|
{
|
||||||
|
button = _T("Left");
|
||||||
|
dbl = ev.LeftDClick();
|
||||||
|
up = ev.LeftUp();
|
||||||
|
}
|
||||||
|
else if ( ev.MiddleDown() || ev.MiddleUp() || ev.MiddleDClick() )
|
||||||
|
{
|
||||||
|
button = _T("Middle");
|
||||||
|
dbl = ev.MiddleDClick();
|
||||||
|
up = ev.MiddleUp();
|
||||||
|
}
|
||||||
|
else if ( ev.RightDown() || ev.RightUp() || ev.RightDClick() )
|
||||||
|
{
|
||||||
|
button = _T("Right");
|
||||||
|
dbl = ev.RightDClick();
|
||||||
|
up = ev.RightUp();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return _T("Unknown mouse event");
|
||||||
|
}
|
||||||
|
|
||||||
|
return wxString::Format(_T("%s mouse button %s"),
|
||||||
|
button.c_str(),
|
||||||
|
dbl ? _T("double clicked")
|
||||||
|
: up ? _T("released") : _T("clicked"));
|
||||||
|
}
|
||||||
|
|
||||||
void MyTextCtrl::OnMouseEvent(wxMouseEvent& ev)
|
void MyTextCtrl::OnMouseEvent(wxMouseEvent& ev)
|
||||||
{
|
{
|
||||||
if ( !ev.Moving() )
|
if ( !ev.Moving() )
|
||||||
@@ -421,37 +457,7 @@ void MyTextCtrl::OnMouseEvent(wxMouseEvent& ev)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// click event
|
msg = GetMouseEventDesc(ev);
|
||||||
wxString button;
|
|
||||||
bool dbl, up;
|
|
||||||
if ( ev.LeftDown() || ev.LeftUp() || ev.LeftDClick() )
|
|
||||||
{
|
|
||||||
button = _T("Left");
|
|
||||||
dbl = ev.LeftDClick();
|
|
||||||
up = ev.LeftUp();
|
|
||||||
}
|
|
||||||
else if ( ev.MiddleDown() || ev.MiddleUp() || ev.MiddleDClick() )
|
|
||||||
{
|
|
||||||
button = _T("Middle");
|
|
||||||
dbl = ev.MiddleDClick();
|
|
||||||
up = ev.MiddleUp();
|
|
||||||
}
|
|
||||||
else if ( ev.RightDown() || ev.RightUp() || ev.RightDClick() )
|
|
||||||
{
|
|
||||||
button = _T("Right");
|
|
||||||
dbl = ev.RightDClick();
|
|
||||||
up = ev.RightUp();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wxLogStatus(_T("Unknown mouse event"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
msg.Printf(_T("%s mouse button %s"),
|
|
||||||
button.c_str(),
|
|
||||||
dbl ? _T("double clicked")
|
|
||||||
: up ? _T("released") : _T("clicked"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
msg << _T(" at (") << ev.GetX() << _T(", ") << ev.GetY() << _T(") ")
|
msg << _T(" at (") << ev.GetX() << _T(", ") << ev.GetY() << _T(") ")
|
||||||
@@ -485,6 +491,22 @@ void MyTextCtrl::OnText(wxCommandEvent& event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyTextCtrl::OnTextURL(wxTextUrlEvent& event)
|
||||||
|
{
|
||||||
|
const wxMouseEvent& ev = event.GetMouseEvent();
|
||||||
|
|
||||||
|
// filter out mouse moves, too many of them
|
||||||
|
if ( ev.Moving() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
long start = event.GetURLStart(),
|
||||||
|
end = event.GetURLEnd();
|
||||||
|
|
||||||
|
wxLogMessage(_T("Mouse event over URL '%s': %s"),
|
||||||
|
GetValue().Mid(start, end - start).c_str(),
|
||||||
|
GetMouseEventDesc(ev).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
void MyTextCtrl::OnChar(wxKeyEvent& event)
|
void MyTextCtrl::OnChar(wxKeyEvent& event)
|
||||||
{
|
{
|
||||||
LogEvent( _T("Char"), event);
|
LogEvent( _T("Char"), event);
|
||||||
@@ -668,7 +690,10 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
|
|||||||
"very very very long line to test"
|
"very very very long line to test"
|
||||||
"wxHSCROLL style",
|
"wxHSCROLL style",
|
||||||
wxPoint(450, 10), wxSize(230, 230),
|
wxPoint(450, 10), wxSize(230, 230),
|
||||||
wxTE_RICH | wxTE_MULTILINE | wxHSCROLL);
|
wxTE_RICH |
|
||||||
|
wxTE_MULTILINE |
|
||||||
|
wxTE_AUTO_URL |
|
||||||
|
wxHSCROLL);
|
||||||
|
|
||||||
m_textrich->SetStyle(0, 10, *wxRED);
|
m_textrich->SetStyle(0, 10, *wxRED);
|
||||||
m_textrich->SetStyle(10, 20, *wxBLUE);
|
m_textrich->SetStyle(10, 20, *wxBLUE);
|
||||||
|
@@ -120,8 +120,6 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_CHOICE_SELECTED)
|
|||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_SELECTED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_SELECTED)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED)
|
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER)
|
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_MENU_SELECTED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_MENU_SELECTED)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_SLIDER_UPDATED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_SLIDER_UPDATED)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_RADIOBOX_SELECTED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_RADIOBOX_SELECTED)
|
||||||
|
@@ -46,6 +46,12 @@
|
|||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxTextUrlEvent, wxCommandEvent)
|
||||||
|
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL)
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// ctor
|
// ctor
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -298,11 +298,19 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
|
|||||||
#if wxUSE_RICHEDIT
|
#if wxUSE_RICHEDIT
|
||||||
if (m_isRich)
|
if (m_isRich)
|
||||||
{
|
{
|
||||||
// Have to enable events
|
// have to enable events manually
|
||||||
::SendMessage(GetHwnd(), EM_SETEVENTMASK, 0,
|
LPARAM mask = ENM_CHANGE | ENM_DROPFILES | ENM_SELCHANGE | ENM_UPDATE;
|
||||||
ENM_CHANGE | ENM_DROPFILES | ENM_SELCHANGE | ENM_UPDATE);
|
|
||||||
|
if ( m_windowStyle & wxTE_AUTO_URL )
|
||||||
|
{
|
||||||
|
mask |= ENM_LINK;
|
||||||
|
|
||||||
|
::SendMessage(GetHwnd(), EM_AUTOURLDETECT, TRUE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
::SendMessage(GetHwnd(), EM_SETEVENTMASK, 0, mask);
|
||||||
}
|
}
|
||||||
#endif
|
#endif // wxUSE_RICHEDIT
|
||||||
|
|
||||||
SubclassWin(GetHWND());
|
SubclassWin(GetHWND());
|
||||||
|
|
||||||
@@ -1170,6 +1178,72 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
|
|||||||
// the rest of the file only deals with the rich edit controls
|
// the rest of the file only deals with the rich edit controls
|
||||||
#if wxUSE_RICHEDIT
|
#if wxUSE_RICHEDIT
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// EN_LINK processing
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxTextCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
||||||
|
{
|
||||||
|
NMHDR *hdr = (NMHDR* )lParam;
|
||||||
|
if ( hdr->code == EN_LINK )
|
||||||
|
{
|
||||||
|
ENLINK *enlink = (ENLINK *)hdr;
|
||||||
|
|
||||||
|
switch ( enlink->msg )
|
||||||
|
{
|
||||||
|
case WM_SETCURSOR:
|
||||||
|
// ok, so it is hardcoded - do we really nee to customize it?
|
||||||
|
::SetCursor(GetHcursorOf(wxCursor(wxCURSOR_HAND)));
|
||||||
|
*result = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
case WM_LBUTTONUP:
|
||||||
|
case WM_LBUTTONDBLCLK:
|
||||||
|
case WM_RBUTTONDOWN:
|
||||||
|
case WM_RBUTTONUP:
|
||||||
|
case WM_RBUTTONDBLCLK:
|
||||||
|
// send a mouse event
|
||||||
|
{
|
||||||
|
static const wxEventType eventsMouse[] =
|
||||||
|
{
|
||||||
|
wxEVT_MOTION,
|
||||||
|
wxEVT_LEFT_DOWN,
|
||||||
|
wxEVT_LEFT_UP,
|
||||||
|
wxEVT_LEFT_DCLICK,
|
||||||
|
wxEVT_RIGHT_DOWN,
|
||||||
|
wxEVT_RIGHT_UP,
|
||||||
|
wxEVT_RIGHT_DCLICK,
|
||||||
|
};
|
||||||
|
|
||||||
|
// the event ids are consecutive
|
||||||
|
wxMouseEvent
|
||||||
|
evtMouse(eventsMouse[enlink->msg - WM_MOUSEMOVE]);
|
||||||
|
|
||||||
|
InitMouseEvent(evtMouse,
|
||||||
|
GET_X_LPARAM(enlink->lParam),
|
||||||
|
GET_Y_LPARAM(enlink->lParam),
|
||||||
|
enlink->wParam);
|
||||||
|
|
||||||
|
wxTextUrlEvent event(m_windowId, evtMouse,
|
||||||
|
enlink->chrg.cpMin,
|
||||||
|
enlink->chrg.cpMax);
|
||||||
|
|
||||||
|
InitCommandEvent(event);
|
||||||
|
|
||||||
|
*result = ProcessCommand(event);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// not processed
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// colour setting for the rich edit controls
|
// colour setting for the rich edit controls
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user