BEGIN_EVENT_TABLE(wxTextCtrl, wxTextCtrlBase)
EVT_CHAR(wxTextCtrl::OnChar)
+ EVT_KEY_DOWN(wxTextCtrl::OnKeyDown)
EVT_DROP_FILES(wxTextCtrl::OnDropFiles)
#if wxUSE_RICHEDIT
valueWin = value;
}
+ // suppress events sent during control creation: we're called either from
+ // the ctor and then we shouldn't generate any events for compatibility
+ // with the other ports, or from SetWindowStyleFlag() and then we shouldn't
+ // generate the events because our text doesn't really change, the fact
+ // that we (sometimes) need to recreate the control is just an
+ // implementation detail
+ m_updatesCount = -2;
+
if ( !MSWCreateControl(windowClass.wx_str(), msStyle, pos, size, valueWin) )
return false;
+ m_updatesCount = -1;
+
#if wxUSE_RICHEDIT
if (IsRich())
{
#if wxUSE_RICHEDIT
if ( IsRich() )
{
+ // if from and to are both -1, it means (in wxWidgets) that all text
+ // should be selected, translate this into Windows convention
+ if ( (from == -1) && (to == -1) )
+ {
+ from = 0;
+ }
+
CHARRANGE range;
range.cpMin = from;
range.cpMax = to;
event.Skip();
}
+void wxTextCtrl::OnKeyDown(wxKeyEvent& event)
+{
+ // richedit control doesn't send WM_PASTE, WM_CUT and WM_COPY messages
+ // when Ctrl-V, X or C is pressed and this prevents wxClipboardTextEvent
+ // from working. So we work around it by intercepting these shortcuts
+ // ourselves and emitting clipboard events (which richedit will handle,
+ // so everything works as before, including pasting of rich text):
+ if ( event.GetModifiers() == wxMOD_CONTROL && IsRich() )
+ {
+ switch ( event.GetKeyCode() )
+ {
+ case 'C':
+ Copy();
+ return;
+ case 'X':
+ Cut();
+ return;
+ case 'V':
+ Paste();
+ return;
+ default:
+ break;
+ }
+ }
+
+ // no, we didn't process it
+ event.Skip();
+}
+
WXLRESULT wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
WXLRESULT lRc = wxTextCtrlBase::MSWWindowProc(nMsg, wParam, lParam);
else // !editable
{
// NB: use "=", not "|=" as the base class version returns
- // the same flags is this state as usual (i.e.
+ // the same flags in the disabled state as usual (i.e.
// including DLGC_WANTMESSAGE). This is strange (how
// does it work in the native Win32 apps?) but for now
// live with it.
void wxTextCtrl::OnDelete(wxCommandEvent& WXUNUSED(event))
{
- long from, to;
- GetSelection(& from, & to);
- if (from != -1 && to != -1)
- Remove(from, to);
+ RemoveSelection();
}
void wxTextCtrl::OnSelectAll(wxCommandEvent& WXUNUSED(event))
{
- SetSelection(-1, -1);
+ SelectAll();
}
void wxTextCtrl::OnUpdateCut(wxUpdateUIEvent& event)
void wxTextCtrl::OnUpdateDelete(wxUpdateUIEvent& event)
{
- long from, to;
- GetSelection(& from, & to);
- event.Enable(from != -1 && to != -1 && from != to && IsEditable()) ;
+ event.Enable( HasSelection() && IsEditable() );
}
void wxTextCtrl::OnUpdateSelectAll(wxUpdateUIEvent& event)
{
- event.Enable(GetLastPosition() > 0);
+ event.Enable( !IsEmpty() );
}
void wxTextCtrl::OnContextMenu(wxContextMenuEvent& event)