+ return wxBORDER_THEME;
+}
+
+// ----------------------------------------------------------------------------
+// wxControlBase - ellipsization code
+// ----------------------------------------------------------------------------
+
+#define wxELLIPSE_REPLACEMENT wxT("...")
+
+/* static and protected */
+wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxDC& dc,
+ wxEllipsizeMode mode, int maxFinalWidth,
+ int replacementWidth, int marginWidth)
+{
+ wxASSERT_MSG(replacementWidth > 0 && marginWidth > 0,
+ "Invalid parameters");
+ wxASSERT_MSG(!curLine.Contains('\n'),
+ "Use Ellipsize() instead!");
+
+ // NOTE: this function assumes that any mnemonic/tab character has already
+ // been handled if it was necessary to handle them (see Ellipsize())
+
+ if (maxFinalWidth <= 0)
+ return wxEmptyString;
+
+ wxArrayInt charOffsets;
+ size_t len = curLine.length();
+ if (len == 0 ||
+ !dc.GetPartialTextExtents(curLine, charOffsets))
+ return curLine;
+
+ wxASSERT(charOffsets.GetCount() == len);
+
+ size_t totalWidth = charOffsets.Last();
+ if ( totalWidth <= (size_t)maxFinalWidth )
+ return curLine; // we don't need to do any ellipsization!
+
+ int excessPixels = totalWidth - maxFinalWidth +
+ replacementWidth +
+ marginWidth; // security margin (NEEDED!)
+ wxASSERT(excessPixels>0);
+
+ // remove characters in excess
+ size_t initialChar, // index of first char to erase
+ nChars; // how many chars do we need to erase?
+
+ switch (mode)
+ {
+ case wxELLIPSIZE_START:
+ initialChar = 0;
+ for ( nChars=0;
+ nChars < len && charOffsets[nChars] < excessPixels;
+ nChars++ )
+ ;
+ break;
+
+ case wxELLIPSIZE_MIDDLE:
+ {
+ // the start & end of the removed span of chars
+ initialChar = len/2;
+ size_t endChar = len/2;
+
+ int removed = 0;
+ for ( ; removed < excessPixels; )
+ {
+ if (initialChar > 0)
+ {
+ // width of the initialChar-th character
+ int width = charOffsets[initialChar] -
+ charOffsets[initialChar-1];
+
+ // remove the initialChar-th character
+ removed += width;
+ initialChar--;
+ }
+
+ if (endChar < len - 1 &&
+ removed < excessPixels)
+ {
+ // width of the (endChar+1)-th character
+ int width = charOffsets[endChar+1] -
+ charOffsets[endChar];
+
+ // remove the endChar-th character
+ removed += width;
+ endChar++;
+ }
+
+ if (initialChar == 0 && endChar == len-1)
+ {
+ nChars = len+1;
+ break;
+ }
+ }
+
+ initialChar++;
+ nChars = endChar - initialChar + 1;
+ }
+ break;
+
+ case wxELLIPSIZE_END:
+ {
+ wxASSERT(len > 0);
+
+ int maxWidth = totalWidth - excessPixels;
+ for ( initialChar = 0;
+ initialChar < len && charOffsets[initialChar] < maxWidth;
+ initialChar++ )
+ ;
+
+ if (initialChar == 0)
+ {
+ nChars = len;
+ }
+ else
+ {
+ //initialChar--; // go back one character
+ nChars = len - initialChar;
+ }
+ }
+ break;
+
+ default:
+ wxFAIL_MSG("invalid ellipsize mode");
+ return curLine;
+ }