diff --git a/Playlist.cpp b/Playlist.cpp index 4e56bdf..bd9fc2b 100644 --- a/Playlist.cpp +++ b/Playlist.cpp @@ -29,7 +29,7 @@ PlaylistScrollButton::mouseMoveEvent (QMouseEvent *event) npos = m_slider->rect().height()-rect().height(); } - m_slider->doScroll (npos); + m_slider->doScroll (); } void @@ -52,19 +52,41 @@ PlaylistScroller::PlaylistScroller (PlaylistWidget *parent) : QWidget (parent) m_button = new PlaylistScrollButton (this, Skin::PLS_SCROLL_0, Skin::PLS_SCROLL_1); m_button->move (0, 0); } + +void +PlaylistScroller::setMax (uint max) +{ + m_max = max; + repositionButton (); +} -int +uint PlaylistScroller::getMax (void) { return rect().height()-m_button->rect().height(); } +uint +PlaylistScroller::getPos (void) +{ + return (int)((float)(m_button->pos ().y ()) / (float)getMax() * (float)m_max); +} + void PlaylistScroller::setPixmaps (Skin *skin) { m_pixmap = skin->getPls (Skin::PLS_RFILL2_0); } +void +PlaylistScroller::repositionButton (void) +{ + PlaylistWidget *pw = dynamic_cast(parent ()); + /* x = 182.6 / (454 - 242) * 224 */ + int bpos = (int)((float)(pw->getOffset ()) / (float)m_max * (float) getMax ()); + m_button->move (0, bpos); +} + void PlaylistScroller::paintEvent (QPaintEvent *event) { @@ -205,6 +227,7 @@ PlaylistWidget::PlaylistWidget (QWidget *parent) : QWidget (parent) m_scroller = new PlaylistScroller (this); connect (m_scroller, SIGNAL(scrolled(int)), this, SLOT(doScroll (int))); + connect (m_list, SIGNAL(sizeChanged(QSize)), this, SLOT(sizeChangedList (QSize))); m_drag = new dragButton (this); @@ -212,16 +235,20 @@ PlaylistWidget::PlaylistWidget (QWidget *parent) : QWidget (parent) resize (275, 300); } +void +PlaylistWidget::sizeChangedList (QSize s) +{ + m_scroller->setMax (s.height() - m_view->height()); +} + void PlaylistWidget::doScroll (int pos) { - int npos = ((float)pos) / (float)(m_scroller->getMax()) * float(m_list->height() - m_view->height()); - - m_list->setOffset (npos); - if (npos == 0) { + m_list->setOffset (pos); + if (pos == 0) { m_list->update (); } else { - m_list->scroll (0, npos); + m_list->scroll (0, pos); } QApplication::sendPostedEvents (m_list, 0); } @@ -231,6 +258,7 @@ PlaylistWidget::resizeEvent (QResizeEvent *event) { m_view->resize (size().width()-30, size().height()-20-38); m_list->setSize (m_view->size().width(), m_view->size().height()); + m_scroller->setMax (m_list->height() - m_view->height()); } void diff --git a/Playlist.h b/Playlist.h index 520c81c..18581b3 100644 --- a/Playlist.h +++ b/Playlist.h @@ -34,9 +34,13 @@ class PlaylistScroller : public QWidget{ public: PlaylistScroller (PlaylistWidget *arent); ~PlaylistScroller () {} - void doScroll (int p) { emit scrolled(p); } + void doScroll (void) { emit scrolled(getPos ()); } - int getMax (void); + uint getPos (void); + uint getMax (void); + void setMax (uint max); + + void repositionButton (void); public slots: void setPixmaps (Skin *skin); @@ -48,6 +52,8 @@ class PlaylistScroller : public QWidget{ void paintEvent (QPaintEvent *event); QPixmap m_pixmap; PlaylistScrollButton *m_button; + + uint m_max; }; class PlaylistView : public QWidget { @@ -65,10 +71,12 @@ class PlaylistWidget : public QWidget { void setActive (bool); void switchDisplay (void); + uint getOffset (void) const { return m_list->getOffset (); }; public slots: void setPixmaps (Skin *skin); void doScroll (int); + void sizeChangedList (QSize); private: void resizeEvent (QResizeEvent *event); @@ -89,7 +97,6 @@ class PlaylistWidget : public QWidget { QPixmap m_rfill3; bool m_active; - PlaylistView *m_view; PlaylistList *m_list; @@ -115,6 +122,7 @@ class PlaylistWindow : public QMainWindow { void moveEvent (QMoveEvent *event); void resizeEvent (QResizeEvent *event); + private: PlaylistWidget *m_playlist; PlaylistShade *m_shaded; diff --git a/PlaylistList.cpp b/PlaylistList.cpp index a5bdd92..2323d12 100644 --- a/PlaylistList.cpp +++ b/PlaylistList.cpp @@ -606,6 +606,7 @@ PlaylistList::addItem (PlaylistItem *i) } if (m_items->count()*getFontH () > size().height()) { resize (size().width(), m_items->count ()*getFontH ()); + emit sizeChanged (size()); } } diff --git a/PlaylistList.h b/PlaylistList.h index f8258ca..78b0992 100644 --- a/PlaylistList.h +++ b/PlaylistList.h @@ -19,6 +19,7 @@ class PlaylistList : public QWidget { void setSize (int, int); void addItem (PlaylistItem *i); void setOffset (int i) { m_offset = i; } + uint getOffset (void) const { return m_offset; } public slots: void setPixmaps (Skin *skin); @@ -29,6 +30,9 @@ class PlaylistList : public QWidget { void setStatus (uint); void settingsSaved (); + signals: + void sizeChanged (QSize); + private: void paintEvent (QPaintEvent *event); void mousePressEvent (QMouseEvent *event);