diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-01-15 05:55:15 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-01-15 05:55:15 +0000 |
| commit | 47a6e5fdf0734ba3e3c03d67ede5fb0beff2b766 (patch) | |
| tree | 252e341a79dcf34b8f1cdc59e046b4c69932ec06 | |
| parent | 05afcf9e9702b1a7d1d7cbcb8849e36092cc1a92 (diff) | |
| download | qmmp-47a6e5fdf0734ba3e3c03d67ede5fb0beff2b766.tar.gz qmmp-47a6e5fdf0734ba3e3c03d67ede5fb0beff2b766.tar.bz2 qmmp-47a6e5fdf0734ba3e3c03d67ede5fb0beff2b766.zip | |
qsui: fixed column alignment
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6027 90c681e8-e032-0410-971d-27865f9a5e38
| -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); |
