X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5a8f04e382a2b5ebeb50e8719889910f813b9d11..51dc95a4c8ccb00741be48f6353749ada3e9f39a:/src/msw/textctrl.cpp diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index d3b91d242b..a6686ae562 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -185,7 +185,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id, // translate wxWin style flags to MSW ones, checking for consistency while // doing it - long msStyle = ES_LEFT | WS_VISIBLE | WS_CHILD | WS_TABSTOP; + long msStyle = ES_LEFT | WS_TABSTOP; if ( m_windowStyle & wxCLIP_SIBLINGS ) msStyle |= WS_CLIPSIBLINGS; @@ -297,36 +297,21 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id, m_isRich = FALSE; #endif // wxUSE_RICHEDIT - bool want3D; - WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D); - - // Even with extended styles, need to combine with WS_BORDER for them to - // look right. - if ( want3D || wxStyleHasBorder(m_windowStyle) ) - msStyle |= WS_BORDER; - - // NB: don't use pos and size as CreateWindowEx arguments because they - // 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.c_str(), - NULL, - msStyle, - 0, 0, 0, 0, - GetHwndOf(parent), - (HMENU)m_windowId, - wxGetInstance(), - NULL); - - wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create text ctrl") ); - -#if wxUSE_CTL3D - if ( want3D ) + // we need to turn '\n's into "\r\n"s for the multiline controls + wxString valueWin; + if ( m_windowStyle & wxTE_MULTILINE ) { - Ctl3dSubclassCtl(GetHwnd()); - m_useCtl3D = TRUE; + valueWin = wxTextFile::Translate(value, wxTextFileType_Dos); + } + else // single line + { + valueWin = value; } -#endif + + if ( !MSWCreateControl(windowClass, msStyle, pos, size, valueWin) ) + return FALSE; + + SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW)); #if wxUSE_RICHEDIT if (m_isRich) @@ -345,32 +330,6 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id, } #endif // wxUSE_RICHEDIT - SubclassWin(GetHWND()); - - // set font, position, size and initial value - wxFont& fontParent = parent->GetFont(); - if ( fontParent.Ok() ) - { - SetFont(fontParent); - } - else - { - SetFont(wxSystemSettings::GetSystemFont(wxSYS_SYSTEM_FONT)); - } - - // Causes a crash for Symantec C++ and WIN32 for some reason -#if !(defined(__SC__) && defined(__WIN32__)) - if ( !value.IsEmpty() ) - { - SetValue(value); - } -#endif - - // set colours - SetupColours(); - - SetSize(pos.x, pos.y, size.x, size.y); - return TRUE; } @@ -404,18 +363,6 @@ void wxTextCtrl::AdoptAttributesFromHWND() m_windowStyle |= wxTE_PROCESS_ENTER; } -void wxTextCtrl::SetupColours() -{ - wxColour bkgndColour; -// if (IsEditable() || (m_windowStyle & wxTE_MULTILINE)) - bkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW); -// else -// bkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); - - SetBackgroundColour(bkgndColour); - SetForegroundColour(GetParent()->GetForegroundColour()); -} - // ---------------------------------------------------------------------------- // set/get the controls text // ---------------------------------------------------------------------------- @@ -701,6 +648,34 @@ void wxTextCtrl::GetSelection(long* from, long* to) const } } +wxString wxTextCtrl::GetStringSelection() const +{ + // the base class version works correctly for the rich text controls + // because there the lines are terminated with just '\r' which means that + // the string length is not changed in the result of the translations doen + // in GetValue() but for the normal ones when we replace "\r\n" with '\n' + // we break the indices +#if wxUSE_RICHEDIT + if ( m_isRich ) + return wxTextCtrlBase::GetStringSelection(); +#endif // wxUSE_RICHEDIT + + long from, to; + GetSelection(&from, &to); + + wxString str; + if ( from < to ) + { + str = wxGetWindowText(GetHWND()).Mid(from, to - from); + + // and now that we have the correct selection, convert it to the + // correct format + str = wxTextFile::Translate(str, wxTextFileType_Unix); + } + + return str; +} + bool wxTextCtrl::IsEditable() const { long style = ::GetWindowLong(GetHwnd(), GWL_STYLE);