diff options
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidgetdrawer.cpp | 117 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidgetdrawer.h | 4 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlistheader.cpp | 4 |
4 files changed, 86 insertions, 41 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp index ac1bd0d60..e6c5e10a5 100644 --- a/src/plugins/Ui/skinned/listwidget.cpp +++ b/src/plugins/Ui/skinned/listwidget.cpp @@ -162,7 +162,7 @@ void ListWidget::paintEvent(QPaintEvent *) continue; } - m_drawer.drawTrack(&painter, m_rows[i]); + m_drawer.drawTrack(&painter, m_rows[i], rtl); } //draw drop line if(m_drop_index != INVALID_INDEX) diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp index 03de46836..f5261bd93 100644 --- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp +++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp @@ -31,7 +31,7 @@ ListWidgetDrawer::ListWidgetDrawer() { m_skin = Skin::instance(); - m_column_manager = QmmpUiSettings::instance()->headerModel(); + m_header_model = QmmpUiSettings::instance()->headerModel(); m_update = false; m_show_anchor = false; m_show_number = false; @@ -144,11 +144,11 @@ void ListWidgetDrawer::prepareRow(ListWidgetRow *row) for(int i = 0; i < row->titles.count() && visible_width > 0; ++i) { - int width = qMin(QmmpUiSettings::instance()->headerModel()->size(i) - 2 * m_padding, + int width = qMin(m_header_model->size(i) - 2 * m_padding, visible_width - 2 * m_padding); row->titles[i] = m_metrics->elidedText (row->titles[i], Qt::ElideRight, width); - visible_width -= QmmpUiSettings::instance()->headerModel()->size(i); + visible_width -= m_header_model->size(i); } } @@ -214,55 +214,102 @@ void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool } } -void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row) +void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl) { int sy = row->rect.y() + m_metrics->overlinePos() - 1; - int sx = row->rect.x(); + int sx = rtl ? row->rect.right() : row->rect.x(); painter->setFont(m_font); - //|= number=|=col1 =|=col2 =|=extra=duration=| - if(row->numberColumnWidth) + if(rtl) { - sx += row->numberColumnWidth; - painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); - QString number = QString("%1").arg(row->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); - } + //|=duration=extra=|= col2=|= col1=|=number =| + 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(sx + m_padding, sy, number); + painter->setPen(m_normal); + painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); + } - for(int i = 0; i < QmmpUiSettings::instance()->headerModel()->count(); i++) - { - if(sx + m_padding >= row->rect.right() - row->lengthColumnWidth) - break; + for(int i = 0; i < m_header_model->count(); i++) + { + if(sx - m_padding <= row->rect.x() + row->lengthColumnWidth) + break; + + painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); + painter->drawText(sx - m_padding - m_metrics->width(row->titles[i]), sy, row->titles[i]); + sx -= m_header_model->size(i); + + if(m_header_model->count() > 1 && sx > row->rect.x() + row->lengthColumnWidth) + { + painter->setPen(m_normal); + painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); + } + } + sx = row->rect.x() + m_padding; painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); - painter->drawText(sx + m_padding, sy, row->titles[i]); - sx += QmmpUiSettings::instance()->headerModel()->size(i); - if(m_column_manager->count() > 1 && sx < row->rect.right() - row->lengthColumnWidth) + if(!row->length.isEmpty()) { + painter->drawText(sx, sy, row->length); + sx += m_metrics->width(row->length) + m_padding; + } + + if(!row->extraString.isEmpty()) + { + painter->setFont(m_extra_font); + painter->drawText(sx, sy, row->extraString); + } + } + else + { + //|= 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(sx - m_padding - m_metrics->width(number), sy, number); painter->setPen(m_normal); painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); } - } - sx = row->rect.right() - m_padding; - painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); + for(int i = 0; i < m_header_model->count(); i++) + { + if(sx + m_padding >= row->rect.right() - row->lengthColumnWidth) + break; + + painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); + painter->drawText(sx + m_padding, sy, row->titles[i]); + sx += m_header_model->size(i); + + if(m_header_model->count() > 1 && sx < row->rect.right() - row->lengthColumnWidth) + { + painter->setPen(m_normal); + painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); + } + } - if(!row->length.isEmpty()) - { - sx -= m_metrics->width(row->length); - painter->drawText(sx, sy, row->length); - sx -= m_padding; - } + sx = row->rect.right() - m_padding; + painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); - if(!row->extraString.isEmpty()) - { - sx -= m_extra_metrics->width(row->extraString); - painter->setFont(m_extra_font); - painter->drawText(sx, sy, row->extraString); + if(!row->length.isEmpty()) + { + sx -= m_metrics->width(row->length); + painter->drawText(sx, sy, row->length); + sx -= m_padding; + } + + if(!row->extraString.isEmpty()) + { + sx -= m_extra_metrics->width(row->extraString); + painter->setFont(m_extra_font); + painter->drawText(sx, sy, row->extraString); + } } } diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.h b/src/plugins/Ui/skinned/listwidgetdrawer.h index 5e3873fba..b7f59a411 100644 --- a/src/plugins/Ui/skinned/listwidgetdrawer.h +++ b/src/plugins/Ui/skinned/listwidgetdrawer.h @@ -77,7 +77,7 @@ public: void fillBackground(QPainter *painter, int width, int height); void drawBackground(QPainter *painter, ListWidgetRow *row); void drawSeparator(QPainter *painter, ListWidgetRow *row, bool rtl); - void drawTrack(QPainter *painter, ListWidgetRow *row); + void drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl); void drawDropLine(QPainter *painter, int row_number, int width); private: @@ -85,7 +85,7 @@ private: Skin *m_skin; QFontMetrics *m_metrics; QFontMetrics *m_extra_metrics; - PlayListHeaderModel *m_column_manager; + PlayListHeaderModel *m_header_model; QFont m_font, m_extra_font; bool m_update; bool m_show_number; diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp index b62fa7dde..ff4fa5c8d 100644 --- a/src/plugins/Ui/skinned/playlistheader.cpp +++ b/src/plugins/Ui/skinned/playlistheader.cpp @@ -97,8 +97,6 @@ void PlayListHeader::readSettings() { QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("Skinned"); - QFont pl_font; - pl_font.fromString(settings.value("pl_font", qApp->font().toString()).toString()); m_font.fromString(settings.value("header_font", qApp->font().toString()).toString()); if (m_metrics) @@ -107,7 +105,7 @@ void PlayListHeader::readSettings() m_metrics = 0; } - m_metrics = new QFontMetrics(pl_font); + m_metrics = new QFontMetrics(m_font); m_show_number = settings.value ("pl_show_numbers", true).toBool(); m_align_numbres = settings.value ("pl_align_numbers", false).toBool(); m_padding = m_metrics->width("9")/2; |
