X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad0bae85d8aa925f3e598d489efd96f25d4e75f5..dc9b623b9561db9a164969e7eec3c1853e839cfb:/src/common/textcmn.cpp?ds=inline diff --git a/src/common/textcmn.cpp b/src/common/textcmn.cpp index 523b23085c..11c063dfdd 100644 --- a/src/common/textcmn.cpp +++ b/src/common/textcmn.cpp @@ -51,6 +51,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxTextUrlEvent, wxCommandEvent) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL) +DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_MAXLEN) // ---------------------------------------------------------------------------- // ctor @@ -58,30 +59,51 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL) wxTextCtrlBase::wxTextCtrlBase() { -#ifndef NO_TEXT_WINDOW_STREAM - #if wxUSE_IOSTREAMH - if (allocate()) - setp(base(),ebuf()); - #else - m_streambuf = new char[64]; - setp(m_streambuf, m_streambuf + 64); - #endif //wxUSE_IOSTREAMH -#endif // NO_TEXT_WINDOW_STREAM } wxTextCtrlBase::~wxTextCtrlBase() { -#ifndef NO_TEXT_WINDOW_STREAM -#if !wxUSE_IOSTREAMH - delete[] m_streambuf; -#endif -#endif } // ---------------------------------------------------------------------------- // style functions - not implemented here // ---------------------------------------------------------------------------- +/* static */ +wxTextAttr wxTextAttr::Combine(const wxTextAttr& attr, + const wxTextAttr& attrDef, + const wxTextCtrlBase *text) +{ + wxFont font = attr.GetFont(); + if ( !font.Ok() ) + { + font = attrDef.GetFont(); + + if ( text && !font.Ok() ) + font = text->GetFont(); + } + + wxColour colFg = attr.GetTextColour(); + if ( !colFg.Ok() ) + { + colFg = attrDef.GetTextColour(); + + if ( text && !colFg.Ok() ) + colFg = text->GetForegroundColour(); + } + + wxColour colBg = attr.GetBackgroundColour(); + if ( !colBg.Ok() ) + { + colBg = attrDef.GetBackgroundColour(); + + if ( text && !colBg.Ok() ) + colBg = text->GetBackgroundColour(); + } + + return wxTextAttr(colFg, colBg, font); +} + // apply styling to text range bool wxTextCtrlBase::SetStyle(long WXUNUSED(start), long WXUNUSED(end), const wxTextAttr& WXUNUSED(style)) @@ -91,9 +113,16 @@ bool wxTextCtrlBase::SetStyle(long WXUNUSED(start), long WXUNUSED(end), } // change default text attributes -bool wxTextCtrlBase::SetDefaultStyle(const wxTextAttr &style) +bool wxTextCtrlBase::SetDefaultStyle(const wxTextAttr& style) { - m_defaultStyle = style; + // keep the old attributes if the new style doesn't specify them unless the + // new style is empty - then reset m_defaultStyle (as there is no other way + // to do it) + if ( style.IsDefault() ) + m_defaultStyle = style; + else + m_defaultStyle = wxTextAttr::Combine(style, m_defaultStyle, this); + return TRUE; } @@ -214,35 +243,14 @@ wxTextCtrl& wxTextCtrlBase::operator<<(const wxChar c) #ifndef NO_TEXT_WINDOW_STREAM -int wxTextCtrlBase::overflow( int WXUNUSED(c) ) +int wxTextCtrlBase::overflow(int c) { - int len = pptr() - pbase(); - char *txt = new char[len+1]; - strncpy(txt, pbase(), len); - txt[len] = '\0'; - (*this) << txt; - setp(pbase(), epptr()); - delete[] txt; - return EOF; -} + AppendText((wxChar)c); -int wxTextCtrlBase::sync() -{ - int len = pptr() - pbase(); - char *txt = new char[len+1]; - strncpy(txt, pbase(), len); - txt[len] = '\0'; - (*this) << txt; - setp(pbase(), epptr()); - delete[] txt; + // return something different from EOF return 0; } -int wxTextCtrlBase::underflow() -{ - return EOF; -} - #endif // NO_TEXT_WINDOW_STREAM // ---------------------------------------------------------------------------- @@ -270,7 +278,7 @@ bool wxTextCtrlBase::CanPaste() const } // ---------------------------------------------------------------------------- -// misc +// selection and ranges // ---------------------------------------------------------------------------- void wxTextCtrlBase::SelectAll() @@ -278,6 +286,25 @@ void wxTextCtrlBase::SelectAll() SetSelection(0, GetLastPosition()); } +wxString wxTextCtrlBase::GetStringSelection() const +{ + long from, to; + GetSelection(&from, &to); + + return GetRange(from, to); +} + +wxString wxTextCtrlBase::GetRange(long from, long to) const +{ + wxString sel; + if ( from < to ) + { + sel = GetValue().Mid(from, to - from); + } + + return sel; +} + #else // !wxUSE_TEXTCTRL // define this one even if !wxUSE_TEXTCTRL because it is also used by other