X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ca8b28f2efff34b9939035a7aeb1de1e3ac98a0c..891ad68ff5ac338d81ea0c4ff176601761e73517:/src/msw/textctrl.cpp diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index d08a18f028..8a4f405bd4 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -68,13 +68,27 @@ #endif #if !USE_SHARED_LIBRARY + IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxControl) BEGIN_EVENT_TABLE(wxTextCtrl, wxControl) EVT_CHAR(wxTextCtrl::OnChar) EVT_DROP_FILES(wxTextCtrl::OnDropFiles) EVT_ERASE_BACKGROUND(wxTextCtrl::OnEraseBackground) + + EVT_MENU(wxID_CUT, wxTextCtrl::OnCut) + EVT_MENU(wxID_COPY, wxTextCtrl::OnCopy) + EVT_MENU(wxID_PASTE, wxTextCtrl::OnPaste) + EVT_MENU(wxID_UNDO, wxTextCtrl::OnUndo) + EVT_MENU(wxID_REDO, wxTextCtrl::OnRedo) + + EVT_UPDATE_UI(wxID_CUT, wxTextCtrl::OnUpdateCut) + EVT_UPDATE_UI(wxID_COPY, wxTextCtrl::OnUpdateCopy) + EVT_UPDATE_UI(wxID_PASTE, wxTextCtrl::OnUpdatePaste) + EVT_UPDATE_UI(wxID_UNDO, wxTextCtrl::OnUpdateUndo) + EVT_UPDATE_UI(wxID_REDO, wxTextCtrl::OnUpdateRedo) END_EVENT_TABLE() + #endif // USE_SHARED_LIBRARY // Text item @@ -363,20 +377,29 @@ void wxTextCtrl::DoSetSize(int x, int y, int width, int height, int sizeFlags) // Clipboard operations void wxTextCtrl::Copy() { - HWND hWnd = (HWND) GetHWND(); - SendMessage(hWnd, WM_COPY, 0, 0L); + if (CanCopy()) + { + HWND hWnd = (HWND) GetHWND(); + SendMessage(hWnd, WM_COPY, 0, 0L); + } } void wxTextCtrl::Cut() { - HWND hWnd = (HWND) GetHWND(); - SendMessage(hWnd, WM_CUT, 0, 0L); + if (CanCut()) + { + HWND hWnd = (HWND) GetHWND(); + SendMessage(hWnd, WM_CUT, 0, 0L); + } } void wxTextCtrl::Paste() { - HWND hWnd = (HWND) GetHWND(); - SendMessage(hWnd, WM_PASTE, 0, 0L); + if (CanPaste()) + { + HWND hWnd = (HWND) GetHWND(); + SendMessage(hWnd, WM_PASTE, 0, 0L); + } } void wxTextCtrl::SetEditable(bool editable) @@ -747,8 +770,24 @@ bool wxTextCtrl::CanCut() const bool wxTextCtrl::CanPaste() const { - int dataFormat = 0; // 0 == any format - return (::SendMessage( (HWND) GetHWND(), EM_CANPASTE, (WPARAM) (UINT) dataFormat, 0) != 0); +#if wxUSE_RICHEDIT + if (m_isRich) + { + int dataFormat = 0; // 0 == any format + return (::SendMessage( (HWND) GetHWND(), EM_CANPASTE, (WPARAM) (UINT) dataFormat, 0) != 0); + } +#endif + if (!IsEditable()) + return FALSE; + + // Standard edit control: check for straight text on clipboard + bool isTextAvailable = FALSE; + if (::OpenClipboard((HWND) wxTheApp->GetTopWindow()->GetHWND())) + { + isTextAvailable = (::IsClipboardFormatAvailable(CF_TEXT) != 0); + ::CloseClipboard(); + } + return isTextAvailable; } // Undo/redo @@ -796,8 +835,8 @@ void wxTextCtrl::GetSelection(long* from, long* to) const } #endif DWORD dwStart, dwEnd; - WPARAM wParam = (WPARAM) (DWORD*) dwStart; // receives starting position - LPARAM lParam = (LPARAM) (DWORD*) dwEnd; // receives ending position + WPARAM wParam = (WPARAM) (DWORD*) & dwStart; // receives starting position + LPARAM lParam = (LPARAM) (DWORD*) & dwEnd; // receives ending position ::SendMessage((HWND) GetHWND(), EM_GETSEL, wParam, lParam); @@ -1195,7 +1234,7 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) // For Rich Edit controls. Do we need it? #if 0 #if wxUSE_RICHEDIT -bool wxTextCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam) +bool wxTextCtrl::MSWOnNotify(WXWPARAM wParam, WXLPARAM lParam) { wxCommandEvent event(0, m_windowId); int eventType = 0; @@ -1204,7 +1243,7 @@ bool wxTextCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam) { // Insert case code here default : - return wxControl::MSWNotify(wParam, lParam); + return wxControl::MSWOnNotify(wParam, lParam); break; } @@ -1219,3 +1258,53 @@ bool wxTextCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam) #endif #endif +void wxTextCtrl::OnCut(wxCommandEvent& event) +{ + Cut(); +} + +void wxTextCtrl::OnCopy(wxCommandEvent& event) +{ + Copy(); +} + +void wxTextCtrl::OnPaste(wxCommandEvent& event) +{ + Paste(); +} + +void wxTextCtrl::OnUndo(wxCommandEvent& event) +{ + Undo(); +} + +void wxTextCtrl::OnRedo(wxCommandEvent& event) +{ + Redo(); +} + +void wxTextCtrl::OnUpdateCut(wxUpdateUIEvent& event) +{ + event.Enable( CanCut() ); +} + +void wxTextCtrl::OnUpdateCopy(wxUpdateUIEvent& event) +{ + event.Enable( CanCopy() ); +} + +void wxTextCtrl::OnUpdatePaste(wxUpdateUIEvent& event) +{ + event.Enable( CanPaste() ); +} + +void wxTextCtrl::OnUpdateUndo(wxUpdateUIEvent& event) +{ + event.Enable( CanUndo() ); +} + +void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event) +{ + event.Enable( CanRedo() ); +} +