aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/statusicon
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-12-12 15:43:15 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-12-12 15:43:15 +0000
commit2d3e4370a6b7729a30b833aa72c79b6a9d2afdb6 (patch)
tree00138453f5bd9f4c998f11156b40746a5361238f /src/plugins/General/statusicon
parent755bc245a92ed816f8d5bf6b80e780be9d35df4c (diff)
downloadqmmp-2d3e4370a6b7729a30b833aa72c79b6a9d2afdb6.tar.gz
qmmp-2d3e4370a6b7729a30b833aa72c79b6a9d2afdb6.tar.bz2
qmmp-2d3e4370a6b7729a30b833aa72c79b6a9d2afdb6.zip
status icon plugin: mouse wheel volume control
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@678 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/General/statusicon')
-rw-r--r--src/plugins/General/statusicon/CMakeLists.txt4
-rw-r--r--src/plugins/General/statusicon/qmmptrayicon.cpp59
-rw-r--r--src/plugins/General/statusicon/qmmptrayicon.h47
-rw-r--r--src/plugins/General/statusicon/statusicon.cpp5
-rw-r--r--src/plugins/General/statusicon/statusicon.h1
-rw-r--r--src/plugins/General/statusicon/statusicon.pro12
6 files changed, 121 insertions, 7 deletions
diff --git a/src/plugins/General/statusicon/CMakeLists.txt b/src/plugins/General/statusicon/CMakeLists.txt
index 8aa408780..045b79b8b 100644
--- a/src/plugins/General/statusicon/CMakeLists.txt
+++ b/src/plugins/General/statusicon/CMakeLists.txt
@@ -31,12 +31,14 @@ SET(libstatusicon_SRCS
settingsdialog.cpp
statusicon.cpp
statusiconfactory.cpp
+ qmmptrayicon.cpp
)
SET(libstatusicon_MOC_HDRS
settingsdialog.h
statusiconfactory.h
statusicon.h
+ qmmptrayicon.h
)
SET(libstatusicon_RCCS
@@ -60,6 +62,6 @@ QT4_WRAP_UI(libstatusicon_UIS_H ${libstatusicon_UIS})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
ADD_LIBRARY(statusicon SHARED ${libstatusicon_SRCS} ${libstatusicon_MOC_SRCS} ${libstatusicon_UIS_H} ${libstatusicon_RCC_SRCS})
-add_dependencies(statusicon qmmpui)
+add_dependencies(statusicon qmmpui libqmmp)
target_link_libraries(statusicon ${QT_LIBRARIES} -lqmmpui -lqmmp)
install(TARGETS statusicon DESTINATION ${LIB_DIR}/qmmp/General)
diff --git a/src/plugins/General/statusicon/qmmptrayicon.cpp b/src/plugins/General/statusicon/qmmptrayicon.cpp
new file mode 100644
index 000000000..1d8605af5
--- /dev/null
+++ b/src/plugins/General/statusicon/qmmptrayicon.cpp
@@ -0,0 +1,59 @@
+/***************************************************************************
+ * Copyright (C) 2008 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 <QEvent>
+#include <QWheelEvent>
+
+#include <qmmp/soundcore.h>
+
+#include "qmmptrayicon.h"
+
+QmmpTrayIcon::QmmpTrayIcon(QObject *parent)
+ : QSystemTrayIcon(parent)
+{
+}
+
+
+QmmpTrayIcon::~QmmpTrayIcon()
+{
+}
+
+bool QmmpTrayIcon::event(QEvent *e)
+{
+ if (e->type() == QEvent::Wheel )
+ {
+ wheelEvent((QWheelEvent *) e);
+ e->accept();
+ return TRUE;
+ }
+ return QSystemTrayIcon::event(e);
+}
+
+void QmmpTrayIcon::wheelEvent(QWheelEvent *e)
+{
+ SoundCore *core = SoundCore::instance();
+ int volume = qMax(core->leftVolume(), core->rightVolume());
+ int balance = (core->rightVolume() - core->leftVolume()) * 100 / volume;
+ volume += e->delta()/20;
+ volume = qMax(volume,0);
+ volume = qMin(volume,100);
+ core->setVolume(volume - qMax(balance,0)*volume/100,
+ volume + qMin(balance,0)*volume/100);
+}
diff --git a/src/plugins/General/statusicon/qmmptrayicon.h b/src/plugins/General/statusicon/qmmptrayicon.h
new file mode 100644
index 000000000..345d6af61
--- /dev/null
+++ b/src/plugins/General/statusicon/qmmptrayicon.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+ * Copyright (C) 2008 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 QMMPTRAYICON_H
+#define QMMPTRAYICON_H
+
+#include <QSystemTrayIcon>
+
+class QEvent;
+class QWheelEvent;
+
+/**
+ @author Ilya Kotov <forkotov02@hotmail.ru>
+*/
+class QmmpTrayIcon : public QSystemTrayIcon
+{
+Q_OBJECT
+public:
+ QmmpTrayIcon(QObject *parent = 0);
+
+ ~QmmpTrayIcon();
+
+protected:
+ bool event(QEvent *e);
+
+private:
+ void wheelEvent(QWheelEvent *e);
+
+};
+
+#endif
diff --git a/src/plugins/General/statusicon/statusicon.cpp b/src/plugins/General/statusicon/statusicon.cpp
index b3e49f2cb..1b2ee4bfb 100644
--- a/src/plugins/General/statusicon/statusicon.cpp
+++ b/src/plugins/General/statusicon/statusicon.cpp
@@ -23,15 +23,18 @@
#include <QDir>
#include <QTimer>
#include <QCoreApplication>
+#include <QWheelEvent>
+#include <QEvent>
#include <qmmp/soundcore.h>
+#include "qmmptrayicon.h"
#include "statusicon.h"
StatusIcon::StatusIcon(QObject *parent)
: General(parent)
{
- m_tray = new QSystemTrayIcon(this);
+ m_tray = new QmmpTrayIcon(this);
connect(m_tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason)));
m_tray->setIcon ( QIcon(":/tray_stop.png"));
m_tray->show();
diff --git a/src/plugins/General/statusicon/statusicon.h b/src/plugins/General/statusicon/statusicon.h
index be65500f4..67fae06e6 100644
--- a/src/plugins/General/statusicon/statusicon.h
+++ b/src/plugins/General/statusicon/statusicon.h
@@ -27,6 +27,7 @@
#include <qmmp/qmmp.h>
class SoundCore;
+class QEvent;
/**
@author Ilya Kotov <forkotov02@hotmail.ru>
diff --git a/src/plugins/General/statusicon/statusicon.pro b/src/plugins/General/statusicon/statusicon.pro
index 8def7d140..a9c46d832 100644
--- a/src/plugins/General/statusicon/statusicon.pro
+++ b/src/plugins/General/statusicon/statusicon.pro
@@ -5,7 +5,7 @@ CONFIG += release \
warn_on \
plugin
-TARGET=$$PLUGINS_PREFIX/General/statusicon
+TARGET =$$PLUGINS_PREFIX/General/statusicon
QMAKE_CLEAN =$$PLUGINS_PREFIX/General/libstatusicon.so
@@ -31,10 +31,12 @@ RESOURCES += images/tray_images.qrc
HEADERS += statusiconfactory.h \
-statusicon.h \
- settingsdialog.h
+ statusicon.h \
+ settingsdialog.h \
+ qmmptrayicon.h
SOURCES += statusiconfactory.cpp \
-statusicon.cpp \
- settingsdialog.cpp
+ statusicon.cpp \
+ settingsdialog.cpp \
+ qmmptrayicon.cpp
FORMS += settingsdialog.ui