diff options
| -rw-r--r-- | src/plugins/Ui/skinned/listwidgetdrawer.cpp | 23 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlistheader.cpp | 17 | ||||
| -rw-r--r-- | src/qmmpui/playlistheadermodel.cpp | 23 | ||||
| -rw-r--r-- | src/qmmpui/playlistheadermodel.h | 2 |
4 files changed, 54 insertions, 11 deletions
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp index b5bb22e3a..db0ff3f1d 100644 --- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp +++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp @@ -148,11 +148,16 @@ void ListWidgetDrawer::prepareRow(ListWidgetRow *row) for(int i = 0; i < row->titles.count() && visible_width > 0; ++i) { - int width = qMin(m_header_model->size(i) - 2 * m_padding, + int size = m_header_model->size(i); + + if(i == 0 && row->numberColumnWidth) + size -= row->numberColumnWidth; + + int width = qMin(size - 2 * m_padding, visible_width - 2 * m_padding); row->titles[i] = m_metrics->elidedText (row->titles[i], Qt::ElideRight, width); - visible_width -= m_header_model->size(i); + visible_width -= size; } } @@ -185,7 +190,7 @@ void ListWidgetDrawer::drawBackground(QPainter *painter, ListWidgetRow *row) void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool rtl) { int sx = row->rect.x() + 50; - int sy = row->rect.y() + m_metrics->overlinePos() - 1; + int sy = row->rect.y() + m_metrics->overlinePos() - 1; painter->setFont(m_font); painter->setPen(m_normal); @@ -248,9 +253,13 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl if(sx - m_padding <= row->rect.x() + row->lengthColumnWidth) break; + int size = m_header_model->size(i); + if(i == 0 && row->numberColumnWidth) + size -= row->numberColumnWidth; + 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); + sx -= size; if(m_header_model->count() > 1 && sx > row->rect.x() + row->lengthColumnWidth) { @@ -292,9 +301,13 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl if(sx + m_padding >= row->rect.right() - row->lengthColumnWidth) break; + int size = m_header_model->size(i); + if(i == 0 && row->numberColumnWidth) + size -= row->numberColumnWidth; + 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); + sx += size; if(m_header_model->count() > 1 && sx < row->rect.right() - row->lengthColumnWidth) { diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp index 79de5aa0e..4134b6607 100644 --- a/src/plugins/Ui/skinned/playlistheader.cpp +++ b/src/plugins/Ui/skinned/playlistheader.cpp @@ -120,6 +120,7 @@ void PlayListHeader::setNumberWidth(int width) if(width != m_number_width) { m_number_width = width; + m_model->setMinimalSize(0, 30 + (m_number_width ? (m_number_width + 2 * m_pl_padding) : 0)); updateColumns(); } } @@ -152,22 +153,28 @@ void PlayListHeader::updateColumns() for(int i = 0; i < m_model->count(); ++i) { + int size = m_model->size(i); + + //add number width to the first column + if(i == 0 && m_number_width) + size -= m_number_width + 2 * m_pl_padding; + if(rtl) - m_rects << QRect(width() - sx - m_model->size(i), 0, m_model->size(i), height()); + m_rects << QRect(width() - sx - size, 0, size, height()); else - m_rects << QRect(sx, 0, m_model->size(i), height()); + m_rects << QRect(sx, 0, size, height()); if(i == m_sorting_column) { m_names << m_metrics->elidedText(m_model->name(i), Qt::ElideRight, - m_model->size(i) - 2 * m_padding - m_arrow_up.width() - 4); + size - 2 * m_padding - m_arrow_up.width() - 4); } else { m_names << m_metrics->elidedText(m_model->name(i), Qt::ElideRight, - m_model->size(i) - 2 * m_padding); + size - 2 * m_padding); } - sx += m_model->size(i); + sx += size; } update(); } diff --git a/src/qmmpui/playlistheadermodel.cpp b/src/qmmpui/playlistheadermodel.cpp index 7a6b1695f..eb00fd883 100644 --- a/src/qmmpui/playlistheadermodel.cpp +++ b/src/qmmpui/playlistheadermodel.cpp @@ -39,6 +39,7 @@ PlayListHeaderModel::PlayListHeaderModel(QObject *parent) : col.size = s.value("size", 150).toInt(); col.titleFormatter = new MetaDataFormatter(col.pattern); col.autoResize = s.value("autoresize", false).toBool(); + col.minSize = 30; m_columns.append(col); s.endGroup(); } @@ -70,6 +71,7 @@ void PlayListHeaderModel::insert(int index, const QString &name, const QString & col.titleFormatter = new MetaDataFormatter(pattern); col.size = 50; col.autoResize = false; + col.minSize = 30; m_columns.insert(index, col); sync(); emit columnAdded(index); @@ -101,7 +103,7 @@ void PlayListHeaderModel::resize(int index, int size) return; } - m_columns[index].size = qMax(size, 30); + m_columns[index].size = qMax(size, m_columns[index].minSize); emit columnResized(index); emit headerChanged(); } @@ -120,6 +122,25 @@ void PlayListHeaderModel::setAutoResize(int index) } } +void PlayListHeaderModel::setMinimalSize(int index, int size) +{ + if(index >= m_columns.size()) + { + qWarning("ColumnManager: index is out of range"); + return; + } + + if(size < 10) + { + qWarning("ColumnManager: invalid size"); + return; + } + + m_columns[index].minSize = size; + if(m_columns[index].size < size) + resize(index, size); +} + void PlayListHeaderModel::move(int from, int to) { if(from < 0 || from >= m_columns.size()) diff --git a/src/qmmpui/playlistheadermodel.h b/src/qmmpui/playlistheadermodel.h index be84aafae..1cc4cf2eb 100644 --- a/src/qmmpui/playlistheadermodel.h +++ b/src/qmmpui/playlistheadermodel.h @@ -40,6 +40,7 @@ public: void remove(int index); void resize(int index, int size); void setAutoResize(int index); + void setMinimalSize(int index, int size); void move(int from, int to); void execEdit(int index, QWidget *parent = 0); void execInsert(int index, QWidget *parent = 0); @@ -66,6 +67,7 @@ private: QString name; QString pattern; int size; + int minSize; bool autoResize; MetaDataFormatter *titleFormatter; }; |
