X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/64dcc269136ad1ad47c6df4d707c9a42961c5694..b9efe021b554fa3967d1442cf758435c5cd5ae8f:/src/common/textcmn.cpp diff --git a/src/common/textcmn.cpp b/src/common/textcmn.cpp index cf77965c5b..a9f1f0b34d 100644 --- a/src/common/textcmn.cpp +++ b/src/common/textcmn.cpp @@ -5,7 +5,7 @@ // Modified by: // Created: 13.07.99 // RCS-ID: $Id$ -// Copyright: (c) wxWindows team +// Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -53,18 +53,6 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_MAXLEN) -// ---------------------------------------------------------------------------- -// ctor -// ---------------------------------------------------------------------------- - -wxTextCtrlBase::wxTextCtrlBase() -{ -} - -wxTextCtrlBase::~wxTextCtrlBase() -{ -} - // ---------------------------------------------------------------------------- // style functions - not implemented here // ---------------------------------------------------------------------------- @@ -77,6 +65,7 @@ wxTextAttr::wxTextAttr(const wxColour& colText, { m_flags = 0; m_leftIndent = 0; + m_leftSubIndent = 0; m_rightIndent = 0; if (m_colText.Ok()) m_flags |= wxTEXT_ATTR_TEXT_COLOUR; if (m_colBack.Ok()) m_flags |= wxTEXT_ATTR_BACKGROUND_COLOUR; @@ -90,6 +79,7 @@ void wxTextAttr::Init() m_textAlignment = wxTEXT_ALIGNMENT_DEFAULT; m_flags = 0; m_leftIndent = 0; + m_leftSubIndent = 0; m_rightIndent = 0; } @@ -126,27 +116,27 @@ wxTextAttr wxTextAttr::Combine(const wxTextAttr& attr, } wxTextAttr newAttr(colFg, colBg, font); - + if (attr.HasAlignment()) newAttr.SetAlignment(attr.GetAlignment()); else if (attrDef.HasAlignment()) newAttr.SetAlignment(attrDef.GetAlignment()); - + if (attr.HasTabs()) newAttr.SetTabs(attr.GetTabs()); else if (attrDef.HasTabs()) newAttr.SetTabs(attrDef.GetTabs()); - + if (attr.HasLeftIndent()) - newAttr.SetLeftIndent(attr.GetLeftIndent()); + newAttr.SetLeftIndent(attr.GetLeftIndent(), attr.GetLeftSubIndent()); else if (attrDef.HasLeftIndent()) - newAttr.SetLeftIndent(attrDef.GetLeftIndent()); - + newAttr.SetLeftIndent(attrDef.GetLeftIndent(), attr.GetLeftSubIndent()); + if (attr.HasRightIndent()) newAttr.SetRightIndent(attr.GetRightIndent()); else if (attrDef.HasRightIndent()) - newAttr.SetRightIndent(attrDef.GetRightIndent()); - + newAttr.SetRightIndent(attrDef.GetRightIndent()); + return newAttr; } @@ -157,6 +147,7 @@ void wxTextAttr::operator= (const wxTextAttr& attr) m_colBack = attr.m_colBack; m_textAlignment = attr.m_textAlignment; m_leftIndent = attr.m_leftIndent; + m_leftSubIndent = attr.m_leftSubIndent; m_rightIndent = attr.m_rightIndent; m_tabs = attr.m_tabs; m_flags = attr.m_flags; @@ -168,14 +159,14 @@ bool wxTextCtrlBase::SetStyle(long WXUNUSED(start), long WXUNUSED(end), const wxTextAttr& WXUNUSED(style)) { // to be implemented in derived TextCtrl classes - return FALSE; + return false; } // get the styling at the given position bool wxTextCtrlBase::GetStyle(long WXUNUSED(position), wxTextAttr& WXUNUSED(style)) { // to be implemented in derived TextCtrl classes - return FALSE; + return false; } // change default text attributes @@ -189,7 +180,7 @@ bool wxTextCtrlBase::SetDefaultStyle(const wxTextAttr& style) else m_defaultStyle = wxTextAttr::Combine(style, m_defaultStyle, this); - return TRUE; + return true; } // get default text attributes @@ -217,25 +208,25 @@ bool wxTextCtrlBase::LoadFile(const wxString& filename) m_filename = filename; - return TRUE; + return true; } } wxLogError(_("File couldn't be loaded.")); #endif // wxUSE_FFILE - return FALSE; + return false; } bool wxTextCtrlBase::SaveFile(const wxString& filename) { - wxString filenameToUse = filename.IsEmpty() ? m_filename : filename; + wxString filenameToUse = filename.empty() ? m_filename : filename; if ( filenameToUse.empty() ) { // what kind of message to give? is it an error or a program bug? wxLogDebug(wxT("Can't save textctrl to file without filename.")); - return FALSE; + return false; } #if wxUSE_FFILE @@ -248,13 +239,13 @@ bool wxTextCtrlBase::SaveFile(const wxString& filename) // if it worked, save for future calls m_filename = filenameToUse; - return TRUE; + return true; } #endif // wxUSE_FFILE wxLogError(_("The text couldn't be saved.")); - return FALSE; + return false; } // ---------------------------------------------------------------------------- @@ -308,7 +299,7 @@ wxTextCtrl& wxTextCtrlBase::operator<<(const wxChar c) // streambuf methods implementation // ---------------------------------------------------------------------------- -#ifndef NO_TEXT_WINDOW_STREAM +#if wxHAS_TEXT_WINDOW_STREAM int wxTextCtrlBase::overflow(int c) { @@ -318,7 +309,7 @@ int wxTextCtrlBase::overflow(int c) return 0; } -#endif // NO_TEXT_WINDOW_STREAM +#endif // wxHAS_TEXT_WINDOW_STREAM // ---------------------------------------------------------------------------- // clipboard stuff @@ -352,7 +343,7 @@ bool wxTextCtrlBase::CanPaste() const // the generic version is unused in wxMSW bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& WXUNUSED(event)) { - return FALSE; + return false; } #else // !__WIN32__ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) @@ -403,9 +394,8 @@ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) case WXK_NUMPAD_DELETE: // delete the character at cursor { - const long pos = GetInsertionPoint(), - last = GetLastPosition(); - if ( pos < last ) + const long pos = GetInsertionPoint(); + if ( pos < GetLastPosition() ) Remove(pos, pos + 1); } break; @@ -420,6 +410,13 @@ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) break; default: +#if wxUSE_UNICODE + if ( event.GetUnicodeKey() ) + { + ch = event.GetUnicodeKey(); + } + else +#endif if ( keycode < 256 && keycode >= 0 && wxIsprint(keycode) ) { // FIXME this is not going to work for non letters... @@ -440,10 +437,10 @@ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) { WriteText(ch); - return TRUE; + return true; } - return FALSE; + return false; } #endif // !__WIN32__ @@ -480,14 +477,42 @@ void wxTextCtrlBase::DoUpdateWindowUI(wxUpdateUIEvent& event) { if ( event.GetSetEnabled() ) Enable(event.GetEnabled()); - + if ( event.GetSetText() ) { if ( event.GetText() != GetValue() ) SetValue(event.GetText()); - } + } +} + +// ---------------------------------------------------------------------------- +// hit testing +// ---------------------------------------------------------------------------- + +wxTextCtrlHitTestResult +wxTextCtrlBase::HitTest(const wxPoint& pt, wxTextCoord *x, wxTextCoord *y) const +{ + // implement in terms of the other overload as the native ports typically + // can get the position and not (x, y) pair directly (although wxUniv + // directly gets x and y -- and so overrides this method as well) + long pos; + wxTextCtrlHitTestResult rc = HitTest(pt, &pos); + + if ( rc != wxTE_HT_UNKNOWN ) + { + PositionToXY(pos, x, y); + } + + return rc; } +wxTextCtrlHitTestResult +wxTextCtrlBase::HitTest(const wxPoint& WXUNUSED(pt), + long * WXUNUSED(pos)) const +{ + // not implemented + return wxTE_HT_UNKNOWN; +} #else // !wxUSE_TEXTCTRL