aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/skinned/listwidget.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-07-14 10:42:00 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-07-14 10:42:00 +0000
commitbe221a1c4f9f8e8c11fc23a34995f1c781552bd9 (patch)
treed11f2b09e7d5162b165107e236389ef88e13fe58 /src/plugins/Ui/skinned/listwidget.cpp
parent16cf50b06b0e696d1737a7af5551bb03bea20368 (diff)
downloadqmmp-be221a1c4f9f8e8c11fc23a34995f1c781552bd9.tar.gz
qmmp-be221a1c4f9f8e8c11fc23a34995f1c781552bd9.tar.bz2
qmmp-be221a1c4f9f8e8c11fc23a34995f1c781552bd9.zip
skinned: added horizontal scroller
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5249 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui/skinned/listwidget.cpp')
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index 976649fa6..1ec9690c6 100644
--- a/src/plugins/Ui/skinned/listwidget.cpp
+++ b/src/plugins/Ui/skinned/listwidget.cpp
@@ -37,6 +37,7 @@
#include "actionmanager.h"
#include "skin.h"
#include "popupwidget.h"
+#include "horizontalslider.h"
#include "playlist.h"
#define INVALID_INDEX -1
@@ -53,6 +54,7 @@ ListWidget::ListWidget(QWidget *parent)
m_timer->setInterval(50);
m_header = new PlayListHeader(this);
+ m_hslider = new HorizontalSlider(this);
m_update = false;
m_drop_index = INVALID_INDEX;
m_scroll_direction = NONE;
@@ -70,6 +72,8 @@ ListWidget::ListWidget(QWidget *parent)
connect(m_skin, SIGNAL(skinChanged()), SLOT(updateSkin()));
connect(m_ui_settings, SIGNAL(repeatableTrackChanged(bool)), SLOT(updateRepeatIndicator()));
connect(m_timer, SIGNAL(timeout()), SLOT(autoscroll()));
+ connect(m_hslider, SIGNAL(sliderMoved(int)), m_header, SLOT(scroll(int)));
+ connect(m_hslider, SIGNAL(sliderMoved(int)), this, SLOT(update()));
SET_ACTION(ActionManager::PL_SHOW_HEADER, this, SLOT(readSettings()));
}
@@ -93,7 +97,7 @@ void ListWidget::readSettings()
if (m_update)
{
m_drawer.readSettings();
- m_row_count = (height() - (m_header->isVisibleTo(this) ? m_header->height() : 0)) / m_drawer.rowHeight();
+ //m_row_count = (height() - (m_header->isVisibleTo(this) ? m_header->height() : 0)) / m_drawer.rowHeight();
updateList(PlayListModel::STRUCTURE);
if(m_popupWidget)
{
@@ -151,6 +155,9 @@ void ListWidget::paintEvent(QPaintEvent *)
#endif
bool rtl = (layoutDirection() == Qt::RightToLeft);
+ painter.setClipRect(5,0,width() - 10, height());
+ painter.translate(-m_header->offset(), 0);
+
for (int i = 0; i < m_rows.size(); ++i )
{
m_drawer.drawBackground(&painter, m_rows[i]);
@@ -246,8 +253,9 @@ void ListWidget::mousePressEvent(QMouseEvent *e)
void ListWidget::resizeEvent(QResizeEvent *e)
{
m_header->setGeometry(0,0,width(), m_header->requiredHeight());
- m_row_count = (e->size().height() - (m_header->isVisibleTo(this) ? m_header->height() : 0)) / m_drawer.rowHeight();
- m_row_count = qMax(m_row_count, 0);
+ m_hslider->setGeometry(5,height() - 7, width() - 10, 7);
+ //m_row_count = (e->size().height() - (m_header->isVisibleTo(this) ? m_header->height() : 0)) / m_drawer.rowHeight();
+ //m_row_count = qMax(m_row_count, 0);
updateList(PlayListModel::STRUCTURE);
QWidget::resizeEvent(e);
}
@@ -294,6 +302,12 @@ bool ListWidget::event (QEvent *e)
void ListWidget::updateList(int flags)
{
+ m_hslider->setVisible(m_header->verticalScrollSize() > 0);
+ m_hslider->setPos(0, m_header->verticalScrollSize());
+
+ if(updateRowCount())
+ flags |= PlayListModel::STRUCTURE;
+
if(flags & PlayListModel::CURRENT)
recenterCurrent();
@@ -456,7 +470,6 @@ void ListWidget::dragEnterEvent(QDragEnterEvent *event)
event->acceptProposedAction();
}
-
void ListWidget::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasUrls())
@@ -518,6 +531,22 @@ const QString ListWidget::getExtraString(int i)
return extra_string.trimmed(); //remove white space
}
+bool ListWidget::updateRowCount()
+{
+ int h = height();
+ if(m_header->isVisibleTo(this))
+ h -= m_header->requiredHeight();
+ if(m_hslider->isVisibleTo(this))
+ h -= m_hslider->height();
+ int row_count = qMax(0, h / m_drawer.rowHeight());
+ if(m_row_count != row_count)
+ {
+ m_row_count = row_count;
+ return true;
+ }
+ return false;
+}
+
void ListWidget::mouseMoveEvent(QMouseEvent *e)
{
if(e->buttons() == Qt::LeftButton)