diff options
Diffstat (limited to 'src/plugins/Ui')
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.cpp | 8 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidgetdrawer.cpp | 5 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidgetdrawer.h | 1 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlistheader.cpp | 115 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlistheader.h | 14 |
5 files changed, 99 insertions, 44 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp index 08720f261..4fe265e8f 100644 --- a/src/plugins/Ui/skinned/listwidget.cpp +++ b/src/plugins/Ui/skinned/listwidget.cpp @@ -64,7 +64,7 @@ ListWidget::ListWidget(QWidget *parent) setMouseTracking(true); readSettings(); - connect(m_skin, SIGNAL(skinChanged()), this, SLOT(updateSkin())); + connect(m_skin, SIGNAL(skinChanged()), SLOT(updateSkin())); connect(m_ui_settings, SIGNAL(repeatableTrackChanged(bool)), SLOT(updateRepeatIndicator())); connect(m_timer, SIGNAL(timeout()), SLOT(autoscroll())); } @@ -98,6 +98,10 @@ void ListWidget::readSettings() m_header->deleteLater(); m_header = 0; } + else if(m_header) + { + m_header->readSettings(); + } if (m_update) { @@ -323,6 +327,8 @@ void ListWidget::updateList(int flags) //song numbers width m_drawer.calculateNumberWidth(m_model->trackCount()); + if(m_header) + m_header->setNumberWidth(m_drawer.numberWidth()); items = m_model->mid(m_first, m_row_count); diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp index 87bc899e6..827639b91 100644 --- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp +++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp @@ -83,6 +83,11 @@ int ListWidgetDrawer::rowHeight() const return m_row_height; } +int ListWidgetDrawer::numberWidth() const +{ + return m_number_width; +} + void ListWidgetDrawer::calculateNumberWidth(int count) { //song numbers width diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.h b/src/plugins/Ui/skinned/listwidgetdrawer.h index 537becc22..71b8137b1 100644 --- a/src/plugins/Ui/skinned/listwidgetdrawer.h +++ b/src/plugins/Ui/skinned/listwidgetdrawer.h @@ -74,6 +74,7 @@ public: void readSettings(); void loadColors(); int rowHeight() const; + int numberWidth() const; void calculateNumberWidth(int count); void prepareRow(ListWidgetRow *row); void fillBackground(QPainter *painter, int width, int height); diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp index c583c15c1..285031603 100644 --- a/src/plugins/Ui/skinned/playlistheader.cpp +++ b/src/plugins/Ui/skinned/playlistheader.cpp @@ -34,10 +34,13 @@ #include "skin.h" #include "playlistheader.h" +#define PADDING 3 + PlayListHeader::PlayListHeader(QWidget *parent) : QWidget(parent) { m_scrollable = false; + m_resize = false; m_metrics = 0; m_model = 0; m_show_number = false; @@ -69,80 +72,112 @@ void PlayListHeader::readSettings() m_metrics = 0; } m_metrics = new QFontMetrics(m_font); - resize(width(), m_metrics->height () +1); + //resize(width(), m_metrics->height () +1); m_show_number = settings.value ("pl_show_numbers", true).toBool(); m_align_numbres = settings.value ("pl_align_numbers", false).toBool(); settings.endGroup(); - updateList(PlayListModel::STRUCTURE); + updateList(); } -void PlayListHeader::setModel(PlayListModel *selected, PlayListModel *previous) +void PlayListHeader::setNumberWidth(int width) { - if(previous) + if(width != m_number_width) { - disconnect(previous, 0, this, 0); //disconnect previous model + m_number_width = width; + updateList(); } - connect (selected, SIGNAL(listChanged(int)), SLOT(updateList(int))); - m_model = selected; - updateList(PlayListModel::STRUCTURE); } -void PlayListHeader::updateList(int flags) +void PlayListHeader::updateList() { - qDebug("1"); - if(flags & PlayListModel::STRUCTURE) + m_rects.clear(); + m_names.clear(); + + int sx = 5 + PADDING; + if(m_number_width) + sx += m_number_width + m_metrics->width("9"); + + if(m_manager->count() == 1) { - qDebug("2"); - //song numbers width - if(m_show_number && m_align_numbres && m_model && m_model->count() > 0) - { - qDebug("3"); - m_number_width = m_metrics->width("9") * QString::number(m_model->count()).size(); - } - else - m_number_width = 0; - qDebug("4"); + m_rects << QRect(sx, 0, width() - sx - 5, height()); + m_names << m_manager->name(0); + return; + } + + for(int i = 0; i < m_manager->count(); ++i) + { + m_rects << QRect(sx, 0, m_manager->size(i)+1, height()); + m_names << m_metrics->elidedText(m_manager->name(i), Qt::ElideRight, + m_manager->size(i) - m_metrics->width("9")); + + sx += m_manager->size(i); } - qDebug("++%d++", m_number_width); update(); } void PlayListHeader::updateSkin() { loadColors(); - //drawButtons(); + update(); } -void PlayListHeader::paintEvent(QPaintEvent *) +void PlayListHeader::mousePressEvent(QMouseEvent *e) { - QPainter painter(this); - painter.setFont(m_font); - painter.setBrush(m_normal_bg); - painter.drawRect(-1,-1,width()+1,height()+1); - - + for(int i = 0; i < m_rects.count(); ++i) + { + if(m_rects.at(i).contains(e->pos())) + { + m_pressed_pos = e->pos(); + + if(e->pos().x() > m_rects[i].right() - m_metrics->width("9")) + { + m_pressed_index = i; + m_size = m_manager->size(i); + m_resize = true; + qDebug("resize = %d", i); + } + else + qDebug("move = %d", i); + } + } +} +void PlayListHeader::mouseReleaseEvent(QMouseEvent *e) +{ + m_resize = false; +} - int sx = 5 + 3 + m_number_width + m_metrics->width("9"); +void PlayListHeader::mouseMoveEvent(QMouseEvent *e) +{ + if(m_resize && m_pressed_index >= 0) + { + //qDebug("delta = %d", e->pos().x() - m_pressed_pos.x()); + m_manager->resize(m_pressed_index, m_size + e->pos().x() - m_pressed_pos.x()); + updateList(); + } +} +void PlayListHeader::paintEvent(QPaintEvent *) +{ + QPainter painter(this); painter.setBrush(m_normal); painter.setPen(m_normal); painter.drawRect(5,-1,width()-10,height()+1); - painter.setPen(m_normal_bg); - - //painter.drawLine(0, height()-1, width(), height()-1); + painter.setPen(m_selected_bg); if(m_number_width) - painter.drawLine(5 + 3 + m_number_width + m_metrics->width("9")/2 - 1, 0, 5 + 3 + m_number_width + m_metrics->width("9")/2 - 1, height()); + { + painter.drawLine(m_rects.at(0).x() - m_metrics->width("9")/2 - 1, 0, + m_rects.at(0).x() - m_metrics->width("9")/2 - 1, height()); + } - for(int i = 0; i < m_manager->count(); ++i) + for(int i = 0; i < m_rects.count(); ++i) { - painter.drawText(sx + m_manager->size(i) / 2 - m_metrics->width(m_manager->name(i))/2, m_metrics->ascent(), m_manager->name(i)); - sx += m_manager->size(i); - //if(i < m_manager->count() - 1) - painter.drawLine(sx - m_metrics->width("9")/2, 0, sx - m_metrics->width("9")/2, height()); + painter.drawLine(m_rects[i].right() - m_metrics->width("9")/2, + 0, m_rects[i].right() - m_metrics->width("9")/2, height()+1); + painter.drawText((m_rects[i].x() + m_rects[i].right())/2 - m_metrics->width(m_names[i])/2, m_metrics->ascent(), m_names[i]); } } diff --git a/src/plugins/Ui/skinned/playlistheader.h b/src/plugins/Ui/skinned/playlistheader.h index 758d4c5b9..238a02219 100644 --- a/src/plugins/Ui/skinned/playlistheader.h +++ b/src/plugins/Ui/skinned/playlistheader.h @@ -44,14 +44,16 @@ public: void readSettings(); -public slots: - void setModel(PlayListModel *selected, PlayListModel *previous = 0); + void setNumberWidth(int width); private slots: - void updateList(int flags); + void updateList(); void updateSkin(); private: + void mousePressEvent(QMouseEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + void mouseMoveEvent(QMouseEvent *e); void paintEvent(QPaintEvent *); void loadColors(); @@ -65,6 +67,12 @@ private: bool m_align_numbres; int m_number_width; ColumnManager *m_manager; + QList <QRect> m_rects; + QStringList m_names; + QPoint m_pressed_pos; + int m_pressed_index; + int m_size; + bool m_resize; }; |
