aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Ui/skinned/horizontalslider.cpp144
-rw-r--r--src/plugins/Ui/skinned/horizontalslider.h65
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp3
-rw-r--r--src/plugins/Ui/skinned/listwidget.h2
-rw-r--r--src/plugins/Ui/skinned/skinned.pro6
5 files changed, 218 insertions, 2 deletions
diff --git a/src/plugins/Ui/skinned/horizontalslider.cpp b/src/plugins/Ui/skinned/horizontalslider.cpp
new file mode 100644
index 000000000..ef9c417b2
--- /dev/null
+++ b/src/plugins/Ui/skinned/horizontalslider.cpp
@@ -0,0 +1,144 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Ilya Kotov *
+ * forkotov02@hotmail.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#include <QPainter>
+#include <QResizeEvent>
+#include <math.h>
+#include "skin.h"
+#include "horizontalslider.h"
+#include "pixmapwidget.h"
+
+HorizontalSlider::HorizontalSlider(QWidget *parent)
+ : QWidget(parent)
+{
+ m_skin = Skin::instance();
+ m_moving = false;
+ m_pressed = false;
+ m_min = 0;
+ m_max = 100;
+ m_value = 0;
+ pos = 0;
+ connect(m_skin, SIGNAL(skinChanged()), this, SLOT(updateSkin()));
+ //setCursor(m_skin->getCursor(Skin::CUR_));
+ updateSkin();
+}
+
+HorizontalSlider::~HorizontalSlider()
+{}
+
+void HorizontalSlider::paintEvent(QPaintEvent *)
+{
+ //int sy = (height()-58)/29;
+ int p = int(ceil(double(m_value - m_min)*(height() - 18*m_skin->ratio())/(m_max - m_min)));
+ QPainter paint(this);
+
+ paint.fillRect(0, 0, width(), height(), m_normal_bg);
+ paint.setPen(m_normal);
+
+ paint.drawRect(0, 0, width() - 1, height() - 1);
+ paint.fillRect(p, 0, 18, height() - 1, m_normal);
+
+
+
+
+ /*paint.drawPixmap(0,0,m_skin->getPlPart(Skin::PL_RFILL));
+ paint.drawPixmap(0,29,m_skin->getPlPart(Skin::PL_RFILL));
+
+ for (int i = 0; i<sy; i++)
+ {
+ paint.drawPixmap(0,58+i*29,m_skin->getPlPart(Skin::PL_RFILL));
+ }
+ if (m_pressed)
+ paint.drawPixmap(5*m_skin->ratio(),p,m_skin->getButton(Skin::PL_BT_SCROLL_P));
+ else
+ paint.drawPixmap(5*m_skin->ratio(),p,m_skin->getButton(Skin::PL_BT_SCROLL_N));*/
+ m_pos = p;
+}
+
+void HorizontalSlider::mousePressEvent(QMouseEvent *e)
+{
+ m_moving = true;
+ m_pressed = true;
+ press_pos = e->x();
+ if (m_pos < e->x() && e->x() < m_pos + 18 * m_skin->ratio())
+ {
+ press_pos = e->x() - m_pos;
+ }
+ else
+ {
+ m_value = convert(qMax(qMin(width()-18*m_skin->ratio(),e->x()-9*m_skin->ratio()),0));
+ press_pos = 9*m_skin->ratio();
+ if (m_value!=m_old)
+ {
+ emit sliderMoved(m_value);
+ m_old = m_value;
+ qDebug ("%d",m_value);
+ }
+ }
+ update();
+}
+
+void HorizontalSlider::mouseReleaseEvent(QMouseEvent*)
+{
+ m_moving = false;
+ m_pressed = false;
+ update();
+}
+
+void HorizontalSlider::mouseMoveEvent(QMouseEvent* e)
+{
+ if (m_moving)
+ {
+ int po = e->x() - press_pos;
+
+ if (0 <= po && po <= width() - 18*m_skin->ratio())
+ {
+ m_value = convert(po);
+ update();
+ if (m_value != m_old)
+ {
+ m_old = m_value;
+ emit sliderMoved(m_value);
+ }
+ }
+ }
+}
+
+void HorizontalSlider::setPos(int p, int max)
+{
+ m_max = max;
+ m_value = p;
+ if(m_moving)
+ return;
+ update();
+}
+
+void HorizontalSlider::updateSkin()
+{
+ m_normal.setNamedColor(m_skin->getPLValue("normal"));
+ m_normal_bg.setNamedColor(m_skin->getPLValue("normalbg"));
+ update();
+ //setCursor(m_skin->getCursor(Skin::CUR_PVSCROLL));
+}
+
+int HorizontalSlider::convert(int p)
+{
+ return int(floor(double(m_max-m_min)*(p)/(width()-18*m_skin->ratio())+m_min));
+}
+
diff --git a/src/plugins/Ui/skinned/horizontalslider.h b/src/plugins/Ui/skinned/horizontalslider.h
new file mode 100644
index 000000000..c69bf4bbe
--- /dev/null
+++ b/src/plugins/Ui/skinned/horizontalslider.h
@@ -0,0 +1,65 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Ilya Kotov *
+ * forkotov02@hotmail.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#ifndef HORIZONTALSLIDER_H
+#define HORIZONTALSLIDER_H
+
+#include <QWidget>
+#include <QColor>
+
+class Skin;
+class PixmapWidget;
+/**
+ @author Ilya Kotov <forkotov02@hotmail.ru>
+*/
+class HorizontalSlider : public QWidget
+{
+Q_OBJECT
+public:
+ HorizontalSlider(QWidget *parent = 0);
+
+ ~HorizontalSlider();
+
+public slots:
+ void setPos(int pos, int max);
+
+signals:
+ void sliderMoved (int);
+
+private slots:
+ void updateSkin();
+
+private:
+ Skin *m_skin;
+ PixmapWidget *m_scroll;
+ int m_old;
+ bool m_moving, m_pressed;
+ int press_pos;
+ int m_min, m_max, m_value, pos, m_pos;
+ int convert(int); // value = convert(position);
+ QColor m_normal, m_normal_bg;
+
+protected:
+ void paintEvent(QPaintEvent*);
+ void mousePressEvent(QMouseEvent*);
+ void mouseReleaseEvent(QMouseEvent*);
+ void mouseMoveEvent(QMouseEvent*);
+};
+
+#endif
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index 1688e0cdb..3a76881cc 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_slider = new HorizontalSlider(this);
m_update = false;
m_drop_index = INVALID_INDEX;
m_scroll_direction = NONE;
@@ -247,6 +249,7 @@ void ListWidget::mousePressEvent(QMouseEvent *e)
void ListWidget::resizeEvent(QResizeEvent *e)
{
m_header->setGeometry(0,0,width(), m_header->requiredHeight());
+ m_slider->setGeometry(0, height() - 7, width(), 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);
diff --git a/src/plugins/Ui/skinned/listwidget.h b/src/plugins/Ui/skinned/listwidget.h
index b5f9f6324..8c87d70f5 100644
--- a/src/plugins/Ui/skinned/listwidget.h
+++ b/src/plugins/Ui/skinned/listwidget.h
@@ -36,6 +36,7 @@ class Skin;
class PlayListItem;
class QmmpUiSettings;
class PlayListHeader;
+class HorizontalSlider;
namespace PlayListPopup{
class PopupWidget;
}
@@ -130,6 +131,7 @@ private:
QTimer *m_timer;
ListWidgetDrawer m_drawer;
PlayListHeader *m_header;
+ HorizontalSlider *m_slider;
};
#endif
diff --git a/src/plugins/Ui/skinned/skinned.pro b/src/plugins/Ui/skinned/skinned.pro
index d486d7e9b..80f271ca8 100644
--- a/src/plugins/Ui/skinned/skinned.pro
+++ b/src/plugins/Ui/skinned/skinned.pro
@@ -56,7 +56,8 @@ HEADERS += mainwindow.h \
skinnedsettings.h \
hotkeyeditor.h \
listwidgetdrawer.h \
- playlistheader.h
+ playlistheader.h \
+ horizontalslider.h
SOURCES += mainwindow.cpp \
button.cpp \
display.cpp \
@@ -106,7 +107,8 @@ SOURCES += mainwindow.cpp \
skinnedsettings.cpp \
hotkeyeditor.cpp \
listwidgetdrawer.cpp \
- playlistheader.cpp
+ playlistheader.cpp \
+ horizontalslider.cpp
TEMPLATE = lib
unix:QMAKE_LIBDIR += ../../../../lib