X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/184144794d383a1ddd6167443f6c22a3281aa96c..e7300ec6d9ebbd1cfa2fcf12c0ce6e5aee85a152:/src/common/textcmn.cpp diff --git a/src/common/textcmn.cpp b/src/common/textcmn.cpp index 0ada7cb2f2..bf4de031f1 100644 --- a/src/common/textcmn.cpp +++ b/src/common/textcmn.cpp @@ -69,6 +69,41 @@ wxTextCtrlBase::~wxTextCtrlBase() // 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)) @@ -78,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; } @@ -236,7 +278,85 @@ bool wxTextCtrlBase::CanPaste() const } // ---------------------------------------------------------------------------- -// misc +// emulating key presses +// ---------------------------------------------------------------------------- + +bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) +{ + // the generic version is unused in wxMSW +#ifndef __WIN32__ + wxChar ch; + int keycode = event.GetKeyCode(); + switch ( keycode ) + { + case WXK_NUMPAD0: + case WXK_NUMPAD1: + case WXK_NUMPAD2: + case WXK_NUMPAD3: + case WXK_NUMPAD4: + case WXK_NUMPAD5: + case WXK_NUMPAD6: + case WXK_NUMPAD7: + case WXK_NUMPAD8: + case WXK_NUMPAD9: + ch = _T('0') + keycode - WXK_NUMPAD0; + break; + + case WXK_MULTIPLY: + case WXK_NUMPAD_MULTIPLY: + ch = _T('*'); + break; + + case WXK_ADD: + case WXK_NUMPAD_ADD: + ch = _T('+'); + break; + + case WXK_SUBTRACT: + case WXK_NUMPAD_SUBTRACT: + ch = _T('-'); + break; + + case WXK_DECIMAL: + case WXK_NUMPAD_DECIMAL: + ch = _T('.'); + break; + + case WXK_DIVIDE: + case WXK_NUMPAD_DIVIDE: + ch = _T('/'); + break; + + default: + if ( keycode < 256 && keycode >= 0 && isprint(keycode) ) + { + // FIXME this is not going to work for non letters... + if ( !event.ShiftDown() ) + { + keycode = tolower(keycode); + } + + ch = (wxChar)keycode; + } + else + { + ch = _T('\0'); + } + } + + if ( ch ) + { + WriteText(ch); + + return TRUE; + } +#endif // !__WIN32__ + + return FALSE; +} + +// ---------------------------------------------------------------------------- +// selection and ranges // ---------------------------------------------------------------------------- void wxTextCtrlBase::SelectAll() @@ -244,11 +364,16 @@ void wxTextCtrlBase::SelectAll() SetSelection(0, GetLastPosition()); } -wxString wxTextCtrlBase::GetSelection() const +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 ) {