/////////////////////////////////////////////////////////////////////////////
-// Name: textctrl.cpp
+// Name: msw/textctrl.cpp
// Purpose: wxTextCtrl
// Author: Julian Smart
// Modified by:
# include <fstream>
#endif
-#if wxUSE_RICHEDIT && (!defined(__GNUWIN32__) || defined(wxUSE_NORLANDER_HEADERS))
+#if wxUSE_RICHEDIT && !defined(__GNUWIN32_OLD__)
#include <richedit.h>
#endif
if (m_windowStyle & wxTE_READONLY)
msStyle |= ES_READONLY;
- if (m_windowStyle & wxHSCROLL)
- msStyle |= (WS_HSCROLL | ES_AUTOHSCROLL);
if (m_windowStyle & wxTE_PASSWORD) // hidden input
msStyle |= ES_PASSWORD;
+ if (m_windowStyle & wxTE_AUTO_SCROLL)
+ msStyle |= ES_AUTOHSCROLL;
+
+
// we always want the characters and the arrows
m_lDlgCode = DLGC_WANTCHARS | DLGC_WANTARROWS;
#ifndef RICHEDIT_CLASS
wxString RICHEDIT_CLASS;
RICHEDIT_CLASS.Printf(_T("RichEdit%d0"), ver);
-#ifdef wxUSE_UNICODE
+#if wxUSE_UNICODE
RICHEDIT_CLASS += _T('W');
#else // ANSI
RICHEDIT_CLASS += _T('A');
// might be -1 in which case we should use the default values (and
// SetSize called below takes care of it)
m_hWnd = (WXHWND)::CreateWindowEx(exStyle,
- windowClass,
+ windowClass.c_str(),
NULL,
msStyle,
0, 0, 0, 0,
#if wxUSE_RICHEDIT
if ( m_isRich )
{
- wxString str;
-
int len = GetWindowTextLength(GetHwnd()) + 1;
+
+ wxString str;
wxChar *p = str.GetWriteBuf(len);
TEXTRANGE textRange;
{
wxString valueDos = wxTextFile::Translate(value, wxTextFileType_Dos);
- SetWindowText(GetHwnd(), valueDos);
+ SetWindowText(GetHwnd(), valueDos.c_str());
AdjustSpaceLimit();
}
SendMessage(hWnd, EM_SETSEL, 0, MAKELPARAM(pos, pos));
#endif // Win32/16
- static const char *nothing = "";
+ static const wxChar *nothing = _T("");
SendMessage(hWnd, EM_REPLACESEL, 0, (LPARAM)nothing);
}
wxString wxTextCtrl::GetLineText(long lineNo) const
{
+ // TODO this should probably be optimized by using GetWriteBuf()
+
size_t len = (size_t)GetLineLength(lineNo) + 1;
+ if ( len < sizeof(WORD) )
+ {
+ // there must be at least enough place for the length WORD in the
+ // buffer
+ len += sizeof(WORD);
+ }
+
char *buf = (char *)malloc(len);
*(WORD *)buf = len;
int noChars = (int)SendMessage(GetHwnd(), EM_GETLINE, lineNo, (LPARAM)buf);
if ( !(m_windowStyle & wxTE_MULTILINE) )
{
wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
- event.SetEventObject( this );
+ InitCommandEvent(event);
if ( GetEventHandler()->ProcessEvent(event) )
return;
}
// ourselves the fact that we got here means that the user code
// decided to skip processing of this TAB - probably to let it
// do its default job.
- //
- // NB: Notice that Ctrl-Tab is handled elsewhere and Alt-Tab is
- // handled by Windows
{
wxNavigationKeyEvent eventNav;
eventNav.SetDirection(!event.ShiftDown());
- eventNav.SetWindowChange(FALSE);
+ eventNav.SetWindowChange(event.ControlDown());
eventNav.SetEventObject(this);
if ( GetParent()->GetEventHandler()->ProcessEvent(eventNav) )
return;
}
break;
-
- default:
- event.Skip();
- return;
}
- // 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
-
- // FIXME
+ // no, we didn't process it
event.Skip();
}
case EN_CHANGE:
{
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
- wxString val(GetValue());
- if ( !val.IsNull() )
- event.m_commandString = WXSTRINGCAST val;
- event.SetEventObject( this );
+ InitCommandEvent(event);
+ event.SetString(GetValue());
ProcessCommand(event);
}
break;
// standard handlers for standard edit menu events
// ----------------------------------------------------------------------------
-void wxTextCtrl::OnCut(wxCommandEvent& event)
+void wxTextCtrl::OnCut(wxCommandEvent& WXUNUSED(event))
{
Cut();
}
-void wxTextCtrl::OnCopy(wxCommandEvent& event)
+void wxTextCtrl::OnCopy(wxCommandEvent& WXUNUSED(event))
{
Copy();
}
-void wxTextCtrl::OnPaste(wxCommandEvent& event)
+void wxTextCtrl::OnPaste(wxCommandEvent& WXUNUSED(event))
{
Paste();
}
-void wxTextCtrl::OnUndo(wxCommandEvent& event)
+void wxTextCtrl::OnUndo(wxCommandEvent& WXUNUSED(event))
{
Undo();
}
-void wxTextCtrl::OnRedo(wxCommandEvent& event)
+void wxTextCtrl::OnRedo(wxCommandEvent& WXUNUSED(event))
{
Redo();
}