Return -1 from GetLineLength() if line number is out of range

Make wxTextCtrl behaviour in all ports consistent with the documentation
and also update wxStyledTextCtrl to behave accordingly.

Closes #18431.
This commit is contained in:
Andreas Falkenhahn
2019-07-07 03:35:21 +02:00
committed by Vadim Zeitlin
parent 6e556d4a71
commit c3ce5244e3
6 changed files with 24 additions and 7 deletions

View File

@@ -5333,7 +5333,14 @@ public:
// implement wxTextAreaBase pure virtual methods // implement wxTextAreaBase pure virtual methods
// --------------------------------------------- // ---------------------------------------------
virtual int GetLineLength(long lineNo) const wxOVERRIDE { return static_cast<int>(GetLineText(lineNo).length()); } virtual int GetLineLength(long lineNo) const wxOVERRIDE
{
if ( lineNo < 0 || lineNo >= GetNumberOfLines() )
return -1;
return static_cast<int>(GetLineText(lineNo).length());
}
virtual wxString GetLineText(long lineNo) const wxOVERRIDE virtual wxString GetLineText(long lineNo) const wxOVERRIDE
{ {
wxString text = GetLine(static_cast<int>(lineNo)); wxString text = GetLine(static_cast<int>(lineNo));

View File

@@ -1803,6 +1803,9 @@ int wxTextCtrl::GetLineLength(long lineNo) const
{ {
long pos = XYToPosition(0, lineNo); long pos = XYToPosition(0, lineNo);
if ( pos == -1 )
return -1;
return GetLengthOfLineContainingPos(pos); return GetLengthOfLineContainingPos(pos);
} }

View File

@@ -776,7 +776,7 @@ int wxTextWidgetImpl::GetLineLength(long lineNo) const
count++; count++;
} }
return 0 ; return -1 ;
} }
void wxTextWidgetImpl::SetJustification() void wxTextWidgetImpl::SetJustification()

View File

@@ -450,7 +450,14 @@ public:
// implement wxTextAreaBase pure virtual methods // implement wxTextAreaBase pure virtual methods
// --------------------------------------------- // ---------------------------------------------
virtual int GetLineLength(long lineNo) const wxOVERRIDE { return static_cast<int>(GetLineText(lineNo).length()); } virtual int GetLineLength(long lineNo) const wxOVERRIDE
{
if ( lineNo < 0 || lineNo >= GetNumberOfLines() )
return -1;
return static_cast<int>(GetLineText(lineNo).length());
}
virtual wxString GetLineText(long lineNo) const wxOVERRIDE virtual wxString GetLineText(long lineNo) const wxOVERRIDE
{ {
wxString text = GetLine(static_cast<int>(lineNo)); wxString text = GetLine(static_cast<int>(lineNo));

View File

@@ -1684,8 +1684,8 @@ int wxTextCtrl::GetLineLength(wxTextCoord line) const
} }
else // multiline else // multiline
{ {
wxCHECK_MSG( (size_t)line < GetLineCount(), -1, if ( line < 0 || line >= GetLineCount() )
wxT("line index out of range") ); return -1;
return GetLines()[line].length(); return GetLines()[line].length();
} }

View File

@@ -347,8 +347,8 @@ void wxTextCtrl::DoSetValue(const wxString& value, int flags)
int wxTextCtrl::GetLineLength(long lineNo) const int wxTextCtrl::GetLineLength(long lineNo) const
{ {
if (lineNo >= (long)m_lines.GetCount()) if (lineNo < 0 || lineNo >= (long)m_lines.GetCount())
return 0; return -1;
return m_lines[lineNo].m_text.Len(); return m_lines[lineNo].m_text.Len();
} }