Don't eliminate text completely in Ellipsize().

If the shortened text is so short there's nothing left of the original,
show one character and "...". This is standard behaviour on both
Windows and OS X, in addition to making lot of sense.

Fixes #11360.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66874 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2011-02-09 19:52:34 +00:00
parent 38ddd614f2
commit 4b52555d71

View File

@@ -402,6 +402,11 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD
calc.Init(0, 1);
while ( !calc.IsShortEnough() )
calc.RemoveFromEnd();
// always show at least one character of the string:
if ( calc.m_nCharsToRemove == len )
return wxString(wxELLIPSE_REPLACEMENT) + curLine[len-1];
break;
}
@@ -444,6 +449,15 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD
else
calc.RemoveFromEnd();
}
// Always show at least one character of the string.
// Additionally, if there's only one character left, prefer
// "a..." to "...a":
if ( calc.m_nCharsToRemove == len ||
calc.m_nCharsToRemove == len - 1 )
{
return curLine[0] + wxString(wxELLIPSE_REPLACEMENT);
}
}
break;
@@ -452,6 +466,11 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD
calc.Init(len - 1, 1);
while ( !calc.IsShortEnough() )
calc.RemoveFromStart();
// always show at least one character of the string:
if ( calc.m_nCharsToRemove == len )
return curLine[0] + wxString(wxELLIPSE_REPLACEMENT);
break;
}