diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-04-03 20:22:13 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-04-03 20:22:13 +0000 |
| commit | ea927e2c69bbc950877934a0a95914ef0a40c916 (patch) | |
| tree | f97c5a96e2446dc72027ec9c30ad658941b546aa /src/plugins/Ui/skinned/listwidgetdrawer.cpp | |
| parent | d7b6e2cd38ca0ef2a750d1b42e7f1bd30af612b1 (diff) | |
| download | qmmp-ea927e2c69bbc950877934a0a95914ef0a40c916.tar.gz qmmp-ea927e2c69bbc950877934a0a95914ef0a40c916.tar.bz2 qmmp-ea927e2c69bbc950877934a0a95914ef0a40c916.zip | |
fixed playlist paddings
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4814 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui/skinned/listwidgetdrawer.cpp')
| -rw-r--r-- | src/plugins/Ui/skinned/listwidgetdrawer.cpp | 132 |
1 files changed, 61 insertions, 71 deletions
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp index 0ab4ce884..a35807177 100644 --- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp +++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp @@ -26,17 +26,19 @@ #include "skin.h" #include "listwidgetdrawer.h" -#define PADDING 3 +// |= number=|=row1=|=row2=|=extra= duration=| ListWidgetDrawer::ListWidgetDrawer() { m_skin = Skin::instance(); + m_column_manager = QmmpUiSettings::instance()->columnManager(); m_update = false; m_show_anchor = false; m_show_number = false; m_align_numbres = false; m_row_height = 0; m_number_width = 0; + m_padding = 0; readSettings(); loadColors(); } @@ -67,6 +69,7 @@ void ListWidgetDrawer::readSettings() m_update = true; m_metrics = new QFontMetrics(m_font); m_extra_metrics = new QFontMetrics(m_extra_font); + m_padding = m_metrics->width("9")/2; m_row_height = m_metrics->lineSpacing() + 1; } @@ -92,15 +95,18 @@ void ListWidgetDrawer::calculateNumberWidth(int count) { //song numbers width if(m_show_number && m_align_numbres && count) - { m_number_width = m_metrics->width("9") * QString::number(count).size(); - } else m_number_width = 0; } void ListWidgetDrawer::prepareRow(ListWidgetRow *row) { + if(m_number_width) + row->numberColumnWidth = m_number_width + 2 * m_padding; + else + row->numberColumnWidth = 0; + if(row->flags & ListWidgetRow::GROUP) { row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, @@ -111,48 +117,39 @@ void ListWidgetDrawer::prepareRow(ListWidgetRow *row) if(m_show_number && !m_align_numbres) row->titles[0].prepend(QString("%1").arg(row->number)+". "); - row->x[ListWidgetRow::NUMBER] = row->x[ListWidgetRow::TITLE] = row->rect.left() + PADDING; + if(!row->length.isEmpty() || !row->extraString.isEmpty()) + row->lengthColumnWidth = m_padding; + else + row->lengthColumnWidth = 0; - if(m_number_width) - { - QString number = QString("%1").arg(row->number); + if(!row->length.isEmpty()) + row->lengthColumnWidth += m_metrics->width(row->length) + m_padding; - row->x[ListWidgetRow::NUMBER] += m_number_width - m_metrics->width(number); - row->x[ListWidgetRow::TITLE] += m_number_width + m_metrics->width("9"); - } + if(!row->extraString.isEmpty()) + row->lengthColumnWidth += m_extra_metrics->width(row->extraString) + m_padding; - row->x[ListWidgetRow::LENGTH] = row->rect.right() - m_metrics->width(row->length) - PADDING; - row->x[ListWidgetRow::EXTRA_STRING] = row->x[ListWidgetRow::LENGTH]; + //elide title + int visible_width = row->rect.width() - row->lengthColumnWidth - row->numberColumnWidth; - int extra_string_width = row->extraString.isEmpty() ? 0 : m_extra_metrics->width(row->extraString); - if(extra_string_width) + if(row->titles.count() == 1 && !row->lengthColumnWidth) { - extra_string_width += row->length.isEmpty() ? 0 : m_extra_metrics->width("9")/2; - row->x[ListWidgetRow::EXTRA_STRING] = row->x[ListWidgetRow::LENGTH] - extra_string_width; + row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, visible_width - 2 * m_padding); + return; } - - //elide title - int visible_width = row->x[ListWidgetRow::EXTRA_STRING] - row->x[ListWidgetRow::TITLE] - - m_metrics->width("9"); - - if( row->titles.count() == 1) + else if(row->titles.count() == 1) { - row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, visible_width); + row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, visible_width - m_padding); return; } - int offset = 0; - for(int i = 0; i < row->titles.count(); ++i) + for(int i = 0; i < row->titles.count() && visible_width > 0; ++i) { - int width = qMin(QmmpUiSettings::instance()->columnManager()->size(i) - m_metrics->width(9), - visible_width - offset); + int width = qMin(QmmpUiSettings::instance()->columnManager()->size(i) - 2 * m_padding, + visible_width - 2 * m_padding); - if(width <= 0) - break; row->titles[i] = m_metrics->elidedText (row->titles[i], Qt::ElideRight, width); - offset += QmmpUiSettings::instance()->columnManager()->size(i); + visible_width -= QmmpUiSettings::instance()->columnManager()->size(i); } - //row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, title_width); } void ListWidgetDrawer::fillBackground(QPainter *painter, int width, int height) @@ -209,60 +206,64 @@ void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool painter->drawLine(sx - 45, sy, sx - 5, sy); painter->drawLine(sx + m_metrics->width(row->titles[0]) + 5, sy, row->rect.width(), sy); + if(row->numberColumnWidth) + { + painter->drawLine(row->rect.left() + row->numberColumnWidth, row->rect.top(), + row->rect.left() + row->numberColumnWidth, row->rect.bottom() + 1); + } } } void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row) { int sy = row->rect.y() + m_metrics->overlinePos() - 1; + int sx = row->rect.x(); painter->setFont(m_font); - painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); - if(m_number_width) + //|= number=|=col1 =|=col2 =|=extra=duration=| + if(row->numberColumnWidth) { + sx += row->numberColumnWidth; + painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); QString number = QString("%1").arg(row->number); - painter->drawText(row->x[ListWidgetRow::NUMBER], sy, number); + painter->drawText(sx - m_padding - m_metrics->width(number), sy, number); + painter->setPen(m_normal); + painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); } - int offset = 0; for(int i = 0; i < QmmpUiSettings::instance()->columnManager()->count(); i++) { - if(row->x[ListWidgetRow::TITLE] + offset >= row->x[ListWidgetRow::EXTRA_STRING] - m_metrics->width("9")) + if(sx + m_padding >= row->rect.right() - row->lengthColumnWidth) break; - painter->drawText(row->x[ListWidgetRow::TITLE] + offset, sy, row->titles[i]); - offset += QmmpUiSettings::instance()->columnManager()->size(i); + painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); + painter->drawText(sx + m_padding, sy, row->titles[i]); + sx += QmmpUiSettings::instance()->columnManager()->size(i); + + if(m_column_manager->count() > 1 && sx < row->rect.right() - row->lengthColumnWidth) + { + painter->setPen(m_normal); + painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); + } } - QString extra_string = row->extraString; + sx = row->rect.right() - m_padding; + painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); - if(!extra_string.isEmpty()) + if(!row->length.isEmpty()) { - painter->setFont(m_extra_font); - painter->drawText(row->x[ListWidgetRow::EXTRA_STRING], sy, extra_string); - painter->setFont(m_font); + sx -= m_metrics->width(row->length); + painter->drawText(sx, sy, row->length); + sx -= m_padding; } - if(!row->length.isEmpty()) - painter->drawText(row->x[ListWidgetRow::LENGTH], sy, row->length); - if(QmmpUiSettings::instance()->columnManager()->count() == 1) - return; - - offset = 0; - painter->setPen(m_normal); - for(int i = 0; i < QmmpUiSettings::instance()->columnManager()->count(); i++) + if(!row->extraString.isEmpty()) { - offset += QmmpUiSettings::instance()->columnManager()->size(i); - - if(QmmpUiSettings::instance()->columnManager()->count() > 1 && - row->x[ListWidgetRow::TITLE] + offset < row->x[ListWidgetRow::EXTRA_STRING] - m_metrics->width("9")) - { - painter->drawLine(row->x[ListWidgetRow::TITLE] + offset - m_metrics->width("9")/2, row->rect.top(), - row->x[ListWidgetRow::TITLE] + offset - m_metrics->width("9")/2, row->rect.bottom() + 1); - } + sx -= m_extra_metrics->width(row->extraString); + painter->setFont(m_extra_font); + painter->drawText(sx, sy, row->extraString); } - } void ListWidgetDrawer::drawDropLine(QPainter *painter, int row_number, int width) @@ -271,14 +272,3 @@ void ListWidgetDrawer::drawDropLine(QPainter *painter, int row_number, int width painter->drawLine (5, row_number * m_row_height, width - 5 , row_number * m_row_height); } - -void ListWidgetDrawer::drawVerticalLine(QPainter *painter, int row_count, int width, bool rtl) -{ - if(m_number_width) - { - painter->setPen(m_normal); - int sx = rtl ? width - 10 - m_number_width - m_metrics->width("9")/2 - 1 : - 5 + PADDING + m_number_width + m_metrics->width("9")/2 - 1; - painter->drawLine(sx, 2, sx, (row_count + 1) * (1 + m_metrics->lineSpacing()) - m_metrics->descent()); - } -} |
