diff options
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/General/dbuscontrol/dbusadaptor.cpp | 58 | ||||
| -rw-r--r-- | src/plugins/General/dbuscontrol/dbusadaptor.h | 15 | ||||
| -rw-r--r-- | src/plugins/General/dbuscontrol/dbuscontrol.cpp | 24 | ||||
| -rw-r--r-- | src/plugins/General/dbuscontrol/dbuscontrol.h | 7 |
4 files changed, 86 insertions, 18 deletions
diff --git a/src/plugins/General/dbuscontrol/dbusadaptor.cpp b/src/plugins/General/dbuscontrol/dbusadaptor.cpp index 23646b5bb..730ab5ee3 100644 --- a/src/plugins/General/dbuscontrol/dbusadaptor.cpp +++ b/src/plugins/General/dbuscontrol/dbusadaptor.cpp @@ -17,49 +17,83 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ + +#include <qmmpui/control.h> + #include "dbusadaptor.h" -DBUSAdaptor::DBUSAdaptor(QObject *parent) - : QDBusAbstractAdaptor(parent) +DBUSAdaptor::DBUSAdaptor(Control *ctrl, QObject *parent) + : QDBusAbstractAdaptor(parent) { + m_control = ctrl; setAutoRelaySignals(TRUE); } DBUSAdaptor::~DBUSAdaptor() +{} + +int DBUSAdaptor::volume() +{ + int left, right; + QMetaObject::invokeMethod(parent(), "leftVolume", Q_RETURN_ARG(int, left)); + QMetaObject::invokeMethod(parent(), "rightVolume", Q_RETURN_ARG(int, right)); + return qMax(left, right); +} + +void DBUSAdaptor::setVolume(int volume) +{ + volume = qMin(volume, 100); + volume = qMax(volume, 0); + int bal = balance(); + int left = volume-qMax(bal,0)*volume/100; + int right = volume+qMin(bal,0)*volume/100; + QMetaObject::invokeMethod(m_control, "setVolume", Q_ARG(int, left), Q_ARG(int, right)); +} + +int DBUSAdaptor::balance() { + int left, right; + QMetaObject::invokeMethod(parent(), "leftVolume", Q_RETURN_ARG(int, left)); + QMetaObject::invokeMethod(parent(), "rightVolume", Q_RETURN_ARG(int, right)); + return (right-left)*100/qMax(left, right); +} + +void DBUSAdaptor::setBalance(int bal) +{ + bal = qMin(bal,100); + bal = qMax(bal,-100); + int left = volume()-qMax(bal,0)*volume()/100; + int right = volume()+qMin(bal,0)*volume()/100; + QMetaObject::invokeMethod(m_control, "setVolume", Q_ARG(int, left), Q_ARG(int, right)); } void DBUSAdaptor::play() { - QMetaObject::invokeMethod(parent(), "play"); + QMetaObject::invokeMethod(m_control, "play"); } void DBUSAdaptor::stop() { - QMetaObject::invokeMethod(parent(), "stop"); + QMetaObject::invokeMethod(m_control, "stop"); } void DBUSAdaptor::next() { - QMetaObject::invokeMethod(parent(), "next"); + QMetaObject::invokeMethod(m_control, "next"); } void DBUSAdaptor::previous() { - QMetaObject::invokeMethod(parent(), "previous"); + QMetaObject::invokeMethod(m_control, "previous"); } void DBUSAdaptor::pause() { - QMetaObject::invokeMethod(parent(), "pause"); + QMetaObject::invokeMethod(m_control, "pause"); } void DBUSAdaptor::exit() { - QMetaObject::invokeMethod(parent(), "exit"); + QMetaObject::invokeMethod(m_control, "exit"); } -void DBUSAdaptor::setVolume(int left, int right) -{ - QMetaObject::invokeMethod(parent(), "setVolume", Q_ARG(int, left), Q_ARG(int, right)); -} diff --git a/src/plugins/General/dbuscontrol/dbusadaptor.h b/src/plugins/General/dbuscontrol/dbusadaptor.h index b1b5fa50d..942e0b9ec 100644 --- a/src/plugins/General/dbuscontrol/dbusadaptor.h +++ b/src/plugins/General/dbuscontrol/dbusadaptor.h @@ -22,6 +22,8 @@ #include <QtDBus> +class Control; + /** @author Ilya Kotov <forkotov02@hotmail.ru> */ @@ -29,11 +31,19 @@ class DBUSAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.qmmp.dbus") +Q_PROPERTY(int volume READ volume WRITE setVolume) +Q_PROPERTY(int balance READ balance WRITE setBalance) + public: - DBUSAdaptor(QObject *parent = 0); + DBUSAdaptor(Control *ctrl, QObject *parent = 0); ~DBUSAdaptor(); + int volume(); + void setVolume(int); + int balance(); + void setBalance(int); + public slots: void play(); void stop(); @@ -41,8 +51,9 @@ public slots: void previous(); void pause(); void exit(); - void setVolume(int, int); +private: + Control *m_control; }; #endif diff --git a/src/plugins/General/dbuscontrol/dbuscontrol.cpp b/src/plugins/General/dbuscontrol/dbuscontrol.cpp index 6cd766063..e2e673b21 100644 --- a/src/plugins/General/dbuscontrol/dbuscontrol.cpp +++ b/src/plugins/General/dbuscontrol/dbuscontrol.cpp @@ -26,16 +26,17 @@ DBUSControl::DBUSControl(Control *control, QObject *parent) : General(parent) { - m_adaptor = new DBUSAdaptor(control); + new DBUSAdaptor(control, this); QDBusConnection connection = QDBusConnection::sessionBus(); - connection.registerObject("/Qmmp", control); + connection.registerObject("/Qmmp", this); connection.registerService("org.qmmp.dbus"); + m_left = 0; + m_right = 0; } DBUSControl::~DBUSControl() { - delete m_adaptor; } void DBUSControl::setState(const uint &state) @@ -60,3 +61,20 @@ void DBUSControl::setState(const uint &state) void DBUSControl::setSongInfo(const SongInfo&) { } + +void DBUSControl::setVolume(int left, int right) +{ + m_left = left; + m_right = right; +} + +int DBUSControl::leftVolume() +{ + return m_left; +} + +int DBUSControl::rightVolume() +{ + return m_right; +} + diff --git a/src/plugins/General/dbuscontrol/dbuscontrol.h b/src/plugins/General/dbuscontrol/dbuscontrol.h index a14c37759..58bac24ce 100644 --- a/src/plugins/General/dbuscontrol/dbuscontrol.h +++ b/src/plugins/General/dbuscontrol/dbuscontrol.h @@ -40,10 +40,15 @@ public: void setState(const uint& state); void setSongInfo(const SongInfo &song); + void setVolume(int left, int right); + +public slots: + int leftVolume(); + int rightVolume(); private: DBUSAdaptor *m_adaptor; - + int m_left, m_right; }; #endif |
