diff options
Diffstat (limited to 'src/plugins/Ui/qsui/listwidgetdrawer.cpp')
| -rw-r--r-- | src/plugins/Ui/qsui/listwidgetdrawer.cpp | 67 |
1 files changed, 51 insertions, 16 deletions
diff --git a/src/plugins/Ui/qsui/listwidgetdrawer.cpp b/src/plugins/Ui/qsui/listwidgetdrawer.cpp index ecae258df..bdc34bd17 100644 --- a/src/plugins/Ui/qsui/listwidgetdrawer.cpp +++ b/src/plugins/Ui/qsui/listwidgetdrawer.cpp @@ -301,6 +301,8 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl { int sy = row->rect.y() + m_metrics->overlinePos() - 1; int sx = rtl ? row->rect.right() : row->rect.x(); + int title_x = 0, extra_x = 0; + bool draw_extra = false; painter->setFont(m_font); painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : m_normal); @@ -349,16 +351,39 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl { for(int i = 0; i < row->sizes.count(); i++) { - painter->drawText(sx - m_padding - metrics->width(row->titles[i]), sy, row->titles[i]); - sx -= row->sizes[i]; + painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); + draw_extra = (i == row->trackStateColumn && !row->extraString.isEmpty()); - if(i == row->trackStateColumn && !row->extraString.isEmpty()) + if(row->alignment[i] == ListWidgetRow::ALIGN_LEFT) + { + title_x = sx - row->sizes[i] + m_padding; + extra_x = draw_extra ? sx - m_padding - m_extra_metrics->width(row->extraString) : 0; + } + else if(row->alignment[i] == ListWidgetRow::ALIGN_RIGHT) + { + title_x = sx - m_padding - metrics->width(row->titles[i]); + extra_x = draw_extra ? sx - row->sizes[i] + m_padding : 0; + } + else + { + title_x = sx - row->sizes[i] / 2 - metrics->width(row->titles[i]) / 2 + + (draw_extra ? (m_extra_metrics->width(row->extraString) + m_padding) / 2 : 0); + extra_x = draw_extra ? title_x - metrics->width(row->extraString) - m_padding : 0; + } + + painter->drawText(title_x, sy, row->titles[i]); + + if(draw_extra) { QFont prev_font = painter->font(); painter->setFont(m_extra_font); - painter->drawText(sx + m_padding, sy, row->extraString); + painter->drawText(extra_x, sy, row->extraString); painter->setFont(prev_font); } + + sx -= row->sizes[i]; + painter->setPen(m_normal); + if(!row->autoResize || i < row->sizes.count() - 1) //do not draw last vertical line { painter->drawLine(sx - 1, row->rect.top(), sx - 1, row->rect.bottom() + 1); @@ -375,7 +400,7 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl { sx += row->numberColumnWidth; QString number = QString("%1").arg(row->number); - painter->drawText(sx - m_padding - m_metrics->width(number), sy, number); + painter->drawText(sx - m_padding - metrics->width(number), sy, number); painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); } @@ -400,28 +425,38 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl { for(int i = 0; i < row->sizes.count(); i++) { + draw_extra = (i == row->trackStateColumn && !row->extraString.isEmpty()); + if(row->alignment[i] == ListWidgetRow::ALIGN_LEFT) - painter->drawText(sx + m_padding, sy, row->titles[i]); + { + title_x = sx + m_padding; + extra_x = draw_extra ? sx + row->sizes[i] - m_padding - m_extra_metrics->width(row->extraString) : 0; + } else if(row->alignment[i] == ListWidgetRow::ALIGN_RIGHT) - painter->drawText(sx + row->sizes[i] - m_padding - m_metrics->width(row->titles[i]), sy, row->titles[i]); + { + title_x = sx + row->sizes[i] - m_padding - metrics->width(row->titles[i]); + extra_x = draw_extra ? sx + m_padding : 0; + } else - painter->drawText(sx + row->sizes[i] / 2 - m_metrics->width(row->titles[i]) / 2, sy, row->titles[i]); - + { + title_x = sx + row->sizes[i] / 2 - metrics->width(row->titles[i]) / 2 - + (draw_extra ? (m_extra_metrics->width(row->extraString) + m_padding) / 2 : 0); + extra_x = draw_extra ? title_x + metrics->width(row->titles[i]) + m_padding : 0; + } - //painter->drawText(sx + m_padding, sy, row->titles[i]); - //painter->drawText(sx + row->sizes[i] - m_padding - m_metrics->width(row->titles[i]), sy, row->titles[i]); - //painter->drawText(sx + row->sizes[i] / 2 - m_metrics->width(row->titles[i]) / 2, sy, row->titles[i]); - sx += row->sizes[i]; + painter->drawText(title_x, sy, row->titles[i]); - if(i == row->trackStateColumn && !row->extraString.isEmpty()) + if(draw_extra) { QFont prev_font = painter->font(); painter->setFont(m_extra_font); - painter->drawText(sx - m_padding - m_extra_metrics->width(row->extraString), - sy, row->extraString); + painter->drawText(extra_x, sy, row->extraString); painter->setFont(prev_font); } + sx += row->sizes[i]; + painter->setPen(m_normal); + if(!row->autoResize || i < row->sizes.count() - 1) //do not draw last vertical line { painter->drawLine(sx - 1, row->rect.top(), sx - 1, row->rect.bottom() + 1); |
