aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2007-11-16 19:04:11 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2007-11-16 19:04:11 +0000
commitbfb812b86d57f12b5db1e79fe003fe13e48514ec (patch)
treeaf69fb4663f5178950b27dc6bc784fa3a2664cea /src
parent5e26d3a305b8e2c193ef04681c3c00937505ce53 (diff)
downloadqmmp-bfb812b86d57f12b5db1e79fe003fe13e48514ec.tar.gz
qmmp-bfb812b86d57f12b5db1e79fe003fe13e48514ec.tar.bz2
qmmp-bfb812b86d57f12b5db1e79fe003fe13e48514ec.zip
shaded mode support for the equalizer window
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@184 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/eqtitlebar.cpp104
-rw-r--r--src/eqtitlebar.h13
-rw-r--r--src/eqwidget.cpp9
-rw-r--r--src/eqwidget.h6
-rw-r--r--src/mainwindow.cpp1
-rw-r--r--src/shadedbar.cpp139
-rw-r--r--src/shadedbar.h77
-rw-r--r--src/skin.cpp26
-rw-r--r--src/skin.h18
-rw-r--r--src/src.pro6
11 files changed, 393 insertions, 8 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c821a8899..e0ec01195 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -78,6 +78,7 @@ SET(libsrc_SRCS
fft.c
shadedvisual.cpp
titlebarcontrol.cpp
+ shadedbar.cpp
)
SET(libsrc_MOC_HDRS
@@ -132,6 +133,7 @@ SET(libsrc_MOC_HDRS
volumebar.h
shadedvisual.h
titlebarcontrol.h
+ shadedbar.h
)
SET(libsrc_RCCS images/images.qrc stuff.qrc translations/qmmp_locales.qrc)
diff --git a/src/eqtitlebar.cpp b/src/eqtitlebar.cpp
index 5eab95f0c..5420831f8 100644
--- a/src/eqtitlebar.cpp
+++ b/src/eqtitlebar.cpp
@@ -19,8 +19,10 @@
***************************************************************************/
#include <QMouseEvent>
#include <QMenu>
+#include <QSettings>
#include "skin.h"
+#include "shadedbar.h"
#include "dock.h"
#include "mainwindow.h"
#include "button.h"
@@ -30,33 +32,81 @@
EqTitleBar::EqTitleBar(QWidget *parent)
: PixmapWidget(parent)
{
+ m_volumeBar = 0;
+ m_balanceBar = 0;
+ m_shade2 = 0;
+ m_left = 0;
+ m_right = 0;
+ m_shaded = FALSE;
+ m_align = FALSE;
m_skin = Skin::getPointer();
m_eq = parentWidget();
m_mw = qobject_cast<MainWindow*>(m_eq->parent());
m_close = new Button(this, Skin::EQ_BT_CLOSE_N, Skin::EQ_BT_CLOSE_P);
connect(m_close, SIGNAL(clicked()),m_eq, SIGNAL(closed()));
m_close->move(264,3);
+ m_shade = new Button(this, Skin::EQ_BT_SHADE1_N, Skin::EQ_BT_SHADE1_P);
+ connect(m_shade, SIGNAL(clicked()), SLOT(shade()));
+ m_shade->move(254,3);
+ QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat);
+ if (settings.value("Equalizer/shaded", FALSE).toBool())
+ shade();
+ m_align = TRUE;
setActive(FALSE);
}
EqTitleBar::~EqTitleBar()
-{}
+{
+ QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat);
+ settings.setValue("Equalizer/shaded", m_shaded);
+}
void EqTitleBar::setActive(bool active)
{
if (active)
{
- setPixmap(m_skin->getEqPart(Skin::EQ_TITLEBAR_A));
+ if (m_shaded)
+ {
+ setPixmap(m_skin->getEqPart(Skin::EQ_TITLEBAR_SHADED_A));
+ m_shade2->show();
+ }
+ else
+ {
+ setPixmap(m_skin->getEqPart(Skin::EQ_TITLEBAR_A));
+ m_shade->show();
+ }
m_close->show();
}
else
{
- setPixmap(m_skin->getEqPart(Skin::EQ_TITLEBAR_I));
+ if (m_shaded)
+ {
+ setPixmap(m_skin->getEqPart(Skin::EQ_TITLEBAR_SHADED_I));
+ m_shade2->hide();
+ }
+ else
+ {
+ setPixmap(m_skin->getEqPart(Skin::EQ_TITLEBAR_I));
+ m_shade->hide();
+ }
m_close->hide();
}
}
+void EqTitleBar::setVolume(int left, int right)
+{
+ m_left = left;
+ m_right = right;
+ if (m_volumeBar && m_balanceBar)
+ {
+ int maxVol = qMax(left, right);
+ m_volumeBar->setValue(maxVol);
+ if (maxVol && !m_volumeBar->isPressed())
+ m_balanceBar->setValue((right - left)*100/maxVol);
+ }
+}
+
void EqTitleBar::mousePressEvent(QMouseEvent* event)
{
switch ((int) event->button ())
@@ -76,7 +126,6 @@ void EqTitleBar::mousePressEvent(QMouseEvent* event)
void EqTitleBar::mouseMoveEvent(QMouseEvent* event)
{
QPoint npos = (event->globalPos()-m_pos);
- //parentWidget()->move(npos);
Dock::getPointer()->move(m_eq, npos);
}
@@ -84,3 +133,50 @@ void EqTitleBar::mouseReleaseEvent(QMouseEvent*)
{
Dock::getPointer()->updateDock();
}
+
+void EqTitleBar::shade()
+{
+ m_shaded = !m_shaded;
+
+ if (m_shaded)
+ {
+ m_eq->setFixedSize(275,14);
+ setPixmap(m_skin->getEqPart(Skin::EQ_TITLEBAR_SHADED_A));
+ m_shade->hide();
+ m_shade2 = new Button(this, Skin::EQ_BT_SHADE2_N, Skin::EQ_BT_SHADE2_P);
+ m_shade2->move(254,3);
+ connect(m_shade2, SIGNAL(clicked()), SLOT(shade()));
+ m_shade2->show();
+ m_volumeBar = new ShadedBar(this, Skin::EQ_VOLUME1, Skin::EQ_VOLUME2, Skin::EQ_VOLUME3);
+ m_volumeBar->move(61,4);
+ m_volumeBar->show();
+ connect(m_volumeBar, SIGNAL(sliderMoved(int)),SLOT(updateVolume()));
+ m_balanceBar = new ShadedBar(this, Skin::EQ_BALANCE1, Skin::EQ_BALANCE2, Skin::EQ_BALANCE3);
+ m_balanceBar->move(164,4);
+ m_balanceBar->setFixedSize(42,7);
+ m_balanceBar->setRange(-100,100);
+ m_balanceBar->show();
+ connect(m_balanceBar, SIGNAL(sliderMoved(int)),SLOT(updateVolume()));
+ setVolume(m_left, m_right); //show current volume and balance
+ }
+ else
+ {
+ m_eq->setFixedSize(275,116);
+ setPixmap(m_skin->getEqPart(Skin::EQ_TITLEBAR_A));
+ delete m_shade2;
+ delete m_volumeBar;
+ delete m_balanceBar;
+ m_volumeBar = 0;
+ m_balanceBar = 0;
+ m_shade2 = 0;
+ m_shade->show();
+ }
+ if (m_align)
+ Dock::getPointer()->align(m_eq, m_shaded? -102: 102);
+}
+
+void EqTitleBar::updateVolume()
+{
+ m_mw->setVolume(m_volumeBar->value(), m_balanceBar->value());
+}
+
diff --git a/src/eqtitlebar.h b/src/eqtitlebar.h
index 52ac12fff..d3e9a0452 100644
--- a/src/eqtitlebar.h
+++ b/src/eqtitlebar.h
@@ -31,6 +31,7 @@ class QMouseEvent;
class Skin;
class MainWindow;
class Button;
+class ShadedBar;
class EqTitleBar : public PixmapWidget
{
@@ -41,14 +42,26 @@ public:
~EqTitleBar();
void setActive(bool);
+ void setVolume(int left, int right);
+
+private slots:
+ void shade();
+ void updateVolume();
private:
Skin* m_skin;
bool m_active;
+ int m_left;
+ int m_right;
QPoint m_pos;
QWidget* m_eq;
MainWindow* m_mw;
Button* m_close;
+ Button* m_shade;
+ Button* m_shade2;
+ bool m_shaded, m_align;
+ ShadedBar* m_volumeBar;
+ ShadedBar* m_balanceBar;
protected:
void mousePressEvent(QMouseEvent*);
diff --git a/src/eqwidget.cpp b/src/eqwidget.cpp
index 7594bc345..d86ab45d2 100644
--- a/src/eqwidget.cpp
+++ b/src/eqwidget.cpp
@@ -362,6 +362,15 @@ void EqWidget::loadPreset(const QString &name)
}
}
+void EqWidget::setInfo(const OutputState &st)
+{
+ if (st.type() == OutputState::Volume)
+ {
+ m_titleBar->setVolume(st.leftVolume(),st.rightVolume());
+
+ }
+}
+
EQPreset *EqWidget::findPreset(const QString &name)
{
foreach(EQPreset *preset, m_autoPresets)
diff --git a/src/eqwidget.h b/src/eqwidget.h
index 0190a3e48..94cd564d5 100644
--- a/src/eqwidget.h
+++ b/src/eqwidget.h
@@ -21,6 +21,7 @@
#define EQWIDGET_H
#include <pixmapwidget.h>
+#include <output.h>
/**
@author Ilya Kotov <forkotov02@hotmail.ru>
@@ -52,6 +53,11 @@ public:
*/
void loadPreset(const QString &name);
+ /*!
+ * shows output volume and balance. Necessare for the shaded mode
+ */
+ void setInfo(const OutputState &st);
+
signals:
void valueChanged();
void closed();
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 30470882d..2d54df4d3 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -307,6 +307,7 @@ void MainWindow::showOutputState(const OutputState &st)
display->setInfo(st);
m_playlist->setInfo(st, m_core->length(), m_playListModel->totalLength());
m_titlebar->setInfo(st);
+ m_equalizer->setInfo(st);
switch ((int) st.type())
{
case OutputState::Playing:
diff --git a/src/shadedbar.cpp b/src/shadedbar.cpp
new file mode 100644
index 000000000..63b2017c0
--- /dev/null
+++ b/src/shadedbar.cpp
@@ -0,0 +1,139 @@
+/***************************************************************************
+ * Copyright (C) 2007 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include <QMouseEvent>
+#include <QPainter>
+#include <QPainter>
+#include <math.h>
+
+#include "skin.h"
+
+#include "shadedbar.h"
+
+ShadedBar::ShadedBar(QWidget *parent, uint slider1, uint slider2, uint slider3)
+ : QWidget(parent)
+{
+ m_slider1 = slider1;
+ m_slider2 = slider2;
+ m_slider3 = slider3;
+ setFixedSize(97,7);
+ //setAutoFillBackground (TRUE);
+ m_skin = Skin::getPointer();
+ connect(m_skin, SIGNAL(skinChanged()), this, SLOT(updateSkin()));
+ m_moving = FALSE;
+ m_min = 0;
+ m_max = 100;
+ m_old = m_value = 0;
+ draw();
+}
+
+
+ShadedBar::~ShadedBar()
+{
+}
+
+void ShadedBar::mousePressEvent(QMouseEvent *e)
+{
+
+ m_moving = TRUE;
+ press_pos = e->x();
+ if(m_pos<e->x() && e->x()<m_pos+3)
+ {
+ press_pos = e->x()-m_pos;
+ }
+ else
+ {
+ m_value = convert(qMax(qMin(width()-3,e->x()-1),0));
+ press_pos = 1;
+ if (m_value!=m_old)
+ {
+ emit sliderMoved(m_value);
+ }
+ }
+ draw();
+}
+
+void ShadedBar::mouseMoveEvent (QMouseEvent *e)
+{
+ if(m_moving)
+ {
+ int po = e->x();
+ po = po - press_pos;
+
+ if(0<=po && po<=width()-3)
+ {
+ m_value = convert(po);
+ draw();
+ emit sliderMoved(m_value);
+ qDebug("%d", m_value);
+ }
+ }
+}
+
+void ShadedBar::mouseReleaseEvent(QMouseEvent*)
+{
+ m_moving = FALSE;
+ draw();
+ m_old = m_value;
+}
+
+void ShadedBar::setValue(int v)
+{
+ if (m_moving || m_max == 0)
+ return;
+ m_value = v;
+ draw();
+}
+
+void ShadedBar::setRange(int min, int max)
+{
+ m_max = max;
+ m_min = min;
+ draw();
+}
+
+void ShadedBar::updateSkin()
+{
+ draw();
+}
+
+void ShadedBar::draw()
+{
+ if (m_value <= m_min + (m_max - m_min)/3)
+ m_pixmap = m_skin->getEqPart(m_slider1);
+ else if(m_min + (m_max - m_min)/3 < m_value && m_value <= m_min + 2*(m_max - m_min)/3)
+ m_pixmap = m_skin->getEqPart(m_slider2);
+ else
+ m_pixmap = m_skin->getEqPart(m_slider3);
+ m_pos = int(ceil(double(m_value-m_min)*(width()-3)/(m_max-m_min)));
+ update();
+}
+
+int ShadedBar::convert(int p)
+{
+ return int(ceil(double(m_max-m_min)*(p)/(width()-3)+m_min));
+}
+
+void ShadedBar::paintEvent(QPaintEvent*)
+{
+ QPainter paint(this);
+ paint.drawPixmap(m_pos,0,m_pixmap);
+}
+
diff --git a/src/shadedbar.h b/src/shadedbar.h
new file mode 100644
index 000000000..4ea8c871f
--- /dev/null
+++ b/src/shadedbar.h
@@ -0,0 +1,77 @@
+/***************************************************************************
+ * Copyright (C) 2007 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef SHADEDBAR_H
+#define SHADEDBAR_H
+
+#include <QWidget>
+
+class QMouseEvent;
+class QPaintEvent;
+
+class Skin;
+
+
+/**
+ @author Ilya Kotov <forkotov02@hotmail.ru>
+*/
+class ShadedBar : public QWidget
+{
+ Q_OBJECT
+public:
+ ShadedBar(QWidget *parent = 0, uint slider1 = 0, uint slider2 = 0, uint slider3 = 0);
+
+ ~ShadedBar();
+ int value()
+ {
+ return m_value;
+ };
+ int isPressed()
+ {
+ return m_moving;
+ }
+ void setRange(int min, int max);
+
+public slots:
+ void setValue(int);
+
+signals:
+ void sliderMoved (int);
+
+private slots:
+ void updateSkin();
+
+private:
+ Skin *m_skin;
+ bool m_moving;
+ int press_pos;
+ int m_max, m_min, m_pos, m_value, m_old, m_x;
+ QPixmap m_pixmap;
+ int convert(int); // value = convert(position);
+ void draw();
+ uint m_slider1, m_slider2, m_slider3;
+
+protected:
+ void mousePressEvent(QMouseEvent*);
+ void mouseReleaseEvent(QMouseEvent*);
+ void mouseMoveEvent(QMouseEvent*);
+ void paintEvent(QPaintEvent*);
+};
+
+#endif
diff --git a/src/skin.cpp b/src/skin.cpp
index 0ea4e366e..40760365b 100644
--- a/src/skin.cpp
+++ b/src/skin.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2006 by Ilya Kotov *
+ * Copyright (C) 2007 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -91,6 +91,7 @@ void Skin::setSkin ( const QString& path )
m_pl_parts.clear();
loadPlayList();
m_eq_parts.clear();
+ loadEq_ex();
m_eq_bar.clear();
m_eq_spline.clear();
loadEqMain();
@@ -365,6 +366,7 @@ void Skin::loadEqMain()
buttons[ EQ_BT_CLOSE_N ] = pixmap->copy ( 0,116,9,9 );
buttons[ EQ_BT_CLOSE_P ] = pixmap->copy ( 0,125,9,9 );
+ buttons[ EQ_BT_SHADE1_N ] = pixmap->copy ( 254,137,9,9 );
for ( int i = 0; i < 19; ++i )
{
@@ -374,6 +376,28 @@ void Skin::loadEqMain()
}
+void Skin::loadEq_ex()
+{
+ QPixmap *pixmap = getPixmap ("eq_ex");
+
+ if (!pixmap)
+ pixmap = getDummyPixmap("eq_ex");
+
+ buttons[ EQ_BT_SHADE1_P ] = pixmap->copy (1,38,9,9);
+ buttons[ EQ_BT_SHADE2_N ] = pixmap->copy (254,3,9,9);
+ buttons[ EQ_BT_SHADE2_P ] = pixmap->copy (1,47,9,9);
+ m_eq_parts[ EQ_TITLEBAR_SHADED_A ] = pixmap->copy(0,0,275,14);
+ m_eq_parts[ EQ_TITLEBAR_SHADED_I ] = pixmap->copy(0,15,275,14);
+ m_eq_parts[ EQ_VOLUME1 ] = pixmap->copy(1,30,3,8);
+ m_eq_parts[ EQ_VOLUME2 ] = pixmap->copy(4,30,3,8);
+ m_eq_parts[ EQ_VOLUME3 ] = pixmap->copy(7,30,3,8);
+ m_eq_parts[ EQ_BALANCE1 ] = pixmap->copy(11,30,3,8);
+ m_eq_parts[ EQ_BALANCE2 ] = pixmap->copy(14,30,3,8);
+ m_eq_parts[ EQ_BALANCE3 ] = pixmap->copy(17,30,3,8);
+
+ delete pixmap;
+}
+
void Skin::loadVisColor()
{
//QList <QColor> colors;
diff --git a/src/skin.h b/src/skin.h
index 614cd6dc4..116f79487 100644
--- a/src/skin.h
+++ b/src/skin.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2006 by Ilya Kotov *
+ * Copyright (C) 2007 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -184,6 +184,13 @@ public:
EQ_BT_AUTO_0_P,
EQ_BT_CLOSE_N,
EQ_BT_CLOSE_P,
+ EQ_BT_SHADE1_N,
+
+ /* eq_ex.* */
+ EQ_BT_SHADE1_P,
+ EQ_BT_SHADE2_N,
+ EQ_BT_SHADE2_P,
+
/* shufrep.* */
BT_EQ_ON_N,
BT_EQ_ON_P,
@@ -243,6 +250,14 @@ public:
EQ_TITLEBAR_A,
EQ_TITLEBAR_I,
EQ_GRAPH,
+ EQ_TITLEBAR_SHADED_A,
+ EQ_TITLEBAR_SHADED_I,
+ EQ_VOLUME1,
+ EQ_VOLUME2,
+ EQ_VOLUME3,
+ EQ_BALANCE1,
+ EQ_BALANCE2,
+ EQ_BALANCE3,
};
enum MonoSter
{
@@ -300,6 +315,7 @@ private:
void loadPlayList();
void loadPLEdit();
void loadEqMain();
+ void loadEq_ex();
void loadVisColor();
void loadShufRep();
void loadLetters();
diff --git a/src/src.pro b/src/src.pro
index b704ee507..47708ec48 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -141,10 +141,12 @@ HEADERS += addurldialog.h \
skinreader.h \
visualmenu.h \
titlebarcontrol.h \
- shadedvisual.h
+ shadedvisual.h \
+ shadedbar.h
SOURCES += addurldialog.cpp \
skinreader.cpp \
visualmenu.cpp \
titlebarcontrol.cpp \
- shadedvisual.cpp
+ shadedvisual.cpp \
+ shadedbar.cpp
FORMS += addurldialog.ui