diff options
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlistheader.cpp | 42 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlistheader.h | 6 |
3 files changed, 49 insertions, 5 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp index ea9cfa50e..835d97d40 100644 --- a/src/plugins/Ui/skinned/listwidget.cpp +++ b/src/plugins/Ui/skinned/listwidget.cpp @@ -332,7 +332,10 @@ void ListWidget::updateList(int flags) //song numbers width m_drawer.calculateNumberWidth(m_model->trackCount()); if(m_header) + { m_header->setNumberWidth(m_drawer.numberWidth()); + m_header->hideSortIndicator(); + } items = m_model->mid(m_first, m_row_count); @@ -400,6 +403,7 @@ void ListWidget::updateColumns() return; m_header->updateColumns(); + m_header->hideSortIndicator(); QList<PlayListItem *> items = m_model->mid(m_first, m_row_count); for(int i = 0; i < items.count(); ++i) { @@ -447,6 +451,7 @@ void ListWidget::setModel(PlayListModel *selected, PlayListModel *previous) { previous->setProperty("first_visible", m_first); disconnect(previous, 0, this, 0); //disconnect previous model + disconnect(previous,0,m_header,0); } qApp->processEvents(); m_model = selected; @@ -463,6 +468,7 @@ void ListWidget::setModel(PlayListModel *selected, PlayListModel *previous) } connect (m_model, SIGNAL(currentVisibleRequest()), SLOT(scrollToCurrent())); connect (m_model, SIGNAL(listChanged(int)), SLOT(updateList(int))); + connect (m_model, SIGNAL(sortingByColumnFinished(int,bool)), m_header, SLOT(showSortIndicator(int,bool))); } void ListWidget::scroll(int sc) diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp index 4d207ef1e..387691d59 100644 --- a/src/plugins/Ui/skinned/playlistheader.cpp +++ b/src/plugins/Ui/skinned/playlistheader.cpp @@ -68,6 +68,7 @@ PlayListHeader::PlayListHeader(QWidget *parent) : m_show_number = false; m_align_numbres = false; m_number_width = 0; + m_sorting_column = -1; m_task = NO_TASK; m_model = QmmpUiSettings::instance()->headerModel(); m_skin = Skin::instance(); @@ -142,14 +143,41 @@ void PlayListHeader::updateColumns() for(int i = 0; i < m_model->count(); ++i) { m_rects << QRect(sx, 0, m_model->size(i), height()); - m_names << m_metrics->elidedText(m_model->name(i), Qt::ElideRight, - m_model->size(i) - 2 * m_padding); + 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); + } + else + { + m_names << m_metrics->elidedText(m_model->name(i), Qt::ElideRight, + m_model->size(i) - 2 * m_padding); + } sx += m_model->size(i); } update(); } +void PlayListHeader::showSortIndicator(int column, bool reverted) +{ + if(m_sorting_column == column && m_reverted == reverted) + return; + + m_sorting_column = column; + m_reverted = reverted; + updateColumns(); +} + +void PlayListHeader::hideSortIndicator() +{ + if(m_sorting_column != -1) + { + m_sorting_column = -1; + updateColumns(); + } +} + void PlayListHeader::updateSkin() { loadColors(); @@ -240,6 +268,7 @@ void PlayListHeader::mouseMoveEvent(QMouseEvent *e) { m_task = MOVE; } + if(m_task == RESIZE && m_model->count() > 1) { m_model->resize(m_pressed_column, m_old_size + e->pos().x() - m_pressed_pos.x()); @@ -366,8 +395,11 @@ void PlayListHeader::paintEvent(QPaintEvent *) painter.drawLine(m_rects[i].right()+1, 0, m_rects[i].right()+1, height()+1); - painter.drawPixmap(m_rects[i].right() - m_arrow_up.width() - 4, (height() - m_arrow_up.height()) / 2, m_arrow_up); - + if(i == m_sorting_column) + { + painter.drawPixmap(m_rects[i].right() - m_arrow_up.width() - 4, + (height() - m_arrow_up.height()) / 2, m_reverted ? m_arrow_up : m_arrow_down); + } } if(m_task == MOVE) @@ -389,7 +421,7 @@ void PlayListHeader::loadColors() m_current.setNamedColor(m_skin->getPLValue("current")); QPixmap px1(skinned_arrow_up_xpm); - QPixmap px2(skinned_arrow_up_xpm); + QPixmap px2(skinned_arrow_down_xpm); m_arrow_up = px1; m_arrow_down = px2; m_arrow_up.fill(m_normal_bg); diff --git a/src/plugins/Ui/skinned/playlistheader.h b/src/plugins/Ui/skinned/playlistheader.h index 648e24fe1..c096b29af 100644 --- a/src/plugins/Ui/skinned/playlistheader.h +++ b/src/plugins/Ui/skinned/playlistheader.h @@ -47,6 +47,10 @@ public: void setNumberWidth(int width); void updateColumns(); +public slots: + void showSortIndicator(int column, bool reverted); + void hideSortIndicator(); + private slots: void updateSkin(); void addColumn(); @@ -78,11 +82,13 @@ private: QPixmap m_arrow_up, m_arrow_down; bool m_show_number; bool m_align_numbres; + bool m_reverted; int m_number_width; int m_pressed_column; int m_old_size; int m_press_offset; int m_padding; + int m_sorting_column; enum { |
