#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
// 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)
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
}
#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);
void wxTextCtrl::OnChar(wxKeyEvent& event)
{
- switch( event.KeyCode() )
+ switch ( event.KeyCode() )
{
case WXK_RETURN:
if ( !(m_windowStyle & wxTE_MULTILINE) )
// don't just call event.Skip() because this will cause TABs and ENTERs
// be passed upwards and we don't always want this - instead process it
// right here
- Default();
-// event.Skip();
+
+ // FIXME
+ event.Skip();
}
long wxTextCtrl::MSWGetDlgCode()
return lRc;
}
-void wxTextCtrl::OnEraseBackground(wxEraseEvent& event)
-{
- if ( m_windowStyle & wxTE_MULTILINE )
- {
- // No flicker - only problem is we probably can't change the background
- Default();
-/*
- RECT rect;
- ::GetClientRect((HWND) GetHWND(), &rect);
-
- HBRUSH hBrush = ::CreateSolidBrush(PALETTERGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue()));
- int mode = ::SetMapMode((HDC) event.GetDC()->GetHDC(), MM_TEXT);
-
- ::FillRect ((HDC) event.GetDC()->GetHDC(), &rect, hBrush);
- ::DeleteObject(hBrush);
- ::SetMapMode((HDC) event.GetDC()->GetHDC(), mode);
-*/
- }
-// wxWindow::OnEraseBackground(event);
-}
-
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;
{
// Insert case code here
default :
- return wxControl::MSWNotify(wParam, lParam);
+ return wxControl::MSWOnNotify(wParam, lParam);
break;
}
#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() );
+}
+