// draw the text on the DC with the correct justification; also add an
// ellipsis if the text is too large to fit in the current width
- void DrawTextFormatted(wxDC *dc, const wxString &text, int col, int x, int y, int width);
+ void DrawTextFormatted(wxDC *dc,
+ const wxString &text,
+ int col,
+ int x,
+ int yMid, // this is middle, not top, of the text
+ int width);
};
WX_DECLARE_EXPORTED_OBJARRAY(wxListLineData, wxListLineDataArray);
dc->DrawRectangle( rectHL );
wxCoord x = rect.x + HEADER_OFFSET_X,
- y = rect.y + (LINE_SPACING + EXTRA_HEIGHT) / 2;
+ yMid = rect.y + rect.height/2;
size_t col = 0;
for ( wxListItemDataList::compatibility_iterator node = m_items.GetFirst();
if ( item->HasImage() )
{
int ix, iy;
- m_owner->DrawImage( item->GetImage(), dc, xOld, y );
m_owner->GetImageSize( item->GetImage(), ix, iy );
+ m_owner->DrawImage( item->GetImage(), dc, xOld, yMid - iy/2 );
ix += IMAGE_MARGIN_IN_REPORT_MODE;
width -= ix;
}
- wxDCClipper clipper(*dc, xOld, y, width - 8, rect.height);
-
if ( item->HasText() )
- DrawTextFormatted(dc, item->GetText(), col, xOld, y, width - 8);
+ DrawTextFormatted(dc, item->GetText(), col, xOld, yMid, width - 8);
}
}
const wxString &text,
int col,
int x,
- int y,
+ int yMid,
int width)
{
- wxString drawntext, ellipsis;
- wxCoord w, h, base_w;
- wxListItem item;
+ wxCoord w, h;
+ dc->GetTextExtent(text, &w, &h);
+
+ const wxCoord y = yMid - (h + 1)/2;
+
+ wxDCClipper clipper(*dc, x, y, width, h);
// determine if the string can fit inside the current width
- dc->GetTextExtent(text, &w, &h);
if (w <= width)
{
// it can, draw it using the items alignment
+ wxListItem item;
m_owner->GetColumn(col, item);
switch ( item.GetAlign() )
{
else // otherwise, truncate and add an ellipsis if possible
{
// determine the base width
- ellipsis = wxString(wxT("..."));
+ wxString ellipsis(wxT("..."));
+ wxCoord base_w;
dc->GetTextExtent(ellipsis, &base_w, &h);
// continue until we have enough space or only one character left
wxCoord w_c, h_c;
size_t len = text.Length();
- drawntext = text.Left(len);
+ wxString drawntext = text.Left(len);
while (len > 1)
{
dc->GetTextExtent(drawntext.Last(), &w_c, &h_c);
{
m_finished = true;
- m_text->PopEventHandler(this);
+ m_text->RemoveEventHandler(this);
m_owner->FinishEditing(m_text);
delete this;
if ( !hitResult )
{
- // outside of any item
+ // outside of any item, reset the selection and bail out
+ HighlightAll(false);
return;
}