X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e3a6a6b2bc15ddda1d614dd232d37e59ad024044..4a93ea29b583718ec19613d6af98ff1ce9cc0ea3:/src/msw/textctrl.cpp diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index 276df78633..ff93bacff4 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -13,7 +13,7 @@ // declarations // ============================================================================ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "textctrl.h" #endif @@ -116,7 +116,22 @@ IMPLEMENT_DYNAMIC_CLASS(wxRichEditModule, wxModule) // event tables and other macros // ---------------------------------------------------------------------------- +#if wxUSE_EXTENDED_RTTI +IMPLEMENT_DYNAMIC_CLASS_XTI(wxTextCtrl, wxControl,"wx/textctrl.h") + +WX_BEGIN_PROPERTIES_TABLE(wxTextCtrl) + WX_PROPERTY_SET_AND_GET_BY_REF_RET_BOOL( Font , wxFont , SetFont , GetFont , ) + WX_PROPERTY_SET_BY_REF( Value , wxString , SetValue, GetValue, wxEmptyString ) +WX_END_PROPERTIES_TABLE() + +WX_BEGIN_HANDLERS_TABLE(wxTextCtrl) +WX_END_HANDLERS_TABLE() + +WX_CONSTRUCTOR_6( wxTextCtrl , wxWindow* , Parent , wxWindowID , Id , wxString , Value , wxPoint , Position , wxSize , Size , long , WindowStyle) +#else IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxControl) +#endif + BEGIN_EVENT_TABLE(wxTextCtrl, wxControl) EVT_CHAR(wxTextCtrl::OnChar) @@ -468,30 +483,32 @@ wxString wxTextCtrl::GetRange(long from, long to) const int len = GetWindowTextLength(GetHwnd()); if ( len > from ) { - // alloc one extra WORD as needed by the control - wxChar *p = str.GetWriteBuf(++len); + { + // alloc one extra WORD as needed by the control + wxStringBuffer tmp(str, ++len); + wxChar *p = tmp; - TEXTRANGE textRange; - textRange.chrg.cpMin = from; - textRange.chrg.cpMax = to == -1 ? len : to; - textRange.lpstrText = p; + TEXTRANGE textRange; + textRange.chrg.cpMin = from; + textRange.chrg.cpMax = to == -1 ? len : to; + textRange.lpstrText = p; - (void)SendMessage(GetHwnd(), EM_GETTEXTRANGE, 0, (LPARAM)&textRange); + (void)SendMessage(GetHwnd(), EM_GETTEXTRANGE, + 0, (LPARAM)&textRange); - if ( m_verRichEdit > 1 ) - { - // RichEdit 2.0 uses just CR ('\r') for the newlines which is - // neither Unix nor Windows style - convert it to something - // reasonable - for ( ; *p; p++ ) + if ( m_verRichEdit > 1 ) { - if ( *p == _T('\r') ) - *p = _T('\n'); + // RichEdit 2.0 uses just CR ('\r') for the + // newlines which is neither Unix nor Windows + // style - convert it to something reasonable + for ( ; *p; p++ ) + { + if ( *p == _T('\r') ) + *p = _T('\n'); + } } } - str.UngetWriteBuf(); - if ( m_verRichEdit == 1 ) { // convert to the canonical form - see comment below @@ -531,6 +548,11 @@ void wxTextCtrl::SetValue(const wxString& value) { DoWriteText(value, FALSE /* not selection only */); } + else // same text + { + // still send an event for consistency + SendUpdateEvent(); + } // we should reset the modified flag even if the value didn't really change @@ -1196,13 +1218,16 @@ wxString wxTextCtrl::GetLineText(long lineNo) const len += sizeof(WORD); wxString str; - wxChar *buf = str.GetWriteBuf(len); - - *(WORD *)buf = (WORD)len; - len = (size_t)::SendMessage(GetHwnd(), EM_GETLINE, lineNo, (LPARAM)buf); - buf[len] = 0; + { + wxStringBufferLength tmp(str, len); + wxChar *buf = tmp; - str.UngetWriteBuf(len); + *(WORD *)buf = (WORD)len; + len = (size_t)::SendMessage(GetHwnd(), EM_GETLINE, + lineNo, (LPARAM)buf); + buf[len] = 0; + tmp.SetLength(len); + } return str; } @@ -1659,7 +1684,7 @@ void wxTextCtrl::OnRedo(wxCommandEvent& WXUNUSED(event)) Redo(); } -void wxTextCtrl::OnDelete(wxCommandEvent& event) +void wxTextCtrl::OnDelete(wxCommandEvent& WXUNUSED(event)) { long from, to; GetSelection(& from, & to); @@ -1667,7 +1692,7 @@ void wxTextCtrl::OnDelete(wxCommandEvent& event) Remove(from, to); } -void wxTextCtrl::OnSelectAll(wxCommandEvent& event) +void wxTextCtrl::OnSelectAll(wxCommandEvent& WXUNUSED(event)) { SetSelection(-1, -1); } @@ -1735,7 +1760,7 @@ void wxTextCtrl::OnRightClick(wxMouseEvent& event) event.Skip(); } -void wxTextCtrl::OnSetFocus(wxFocusEvent& event) +void wxTextCtrl::OnSetFocus(wxFocusEvent& WXUNUSED(event)) { // be sure the caret remains invisible if the user had hidden it if ( !m_isNativeCaretShown ) @@ -1839,7 +1864,7 @@ bool wxTextCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) } return TRUE; } - + // not processed, leave it to the base class return wxTextCtrlBase::MSWOnNotify(idCtrl, lParam, result); }