Git commit c6033f3ceecb0f53c8fc93c802993fbfd2450741 by Trever Fischer. Committed on 26/09/2012 at 01:59. Pushed by tdfischer into branch 'kmix-improvements'. Implement master controls M +6 -4 src/daemon2/BackendManager.cpp M +4 -1 src/daemon2/BackendManager.h M +35 -7 src/daemon2/KMixDApp.cpp M +10 -1 src/daemon2/KMixDApp.h M +5 -1 src/dbus/org.kde.kmix.kmixd.xml http://commits.kde.org/kmix/c6033f3ceecb0f53c8fc93c802993fbfd2450741 diff --git a/src/daemon2/BackendManager.cpp b/src/daemon2/BackendManager.cpp index 7016a79..d9be01a 100644 --- a/src/daemon2/BackendManager.cpp +++ b/src/daemon2/BackendManager.cpp @@ -35,8 +35,8 @@ BackendManager::BackendManager() m_groups[Control::HardwareInput] =3D new ControlGroup("Hardware Input"= ); m_groups[Control::HardwareOutput] =3D new ControlGroup("Hardware Outpu= t"); Backend *pulse =3D new Backends::PulseAudio(this); - connect(pulse, SIGNAL(controlAdded(Control *)), this, SLOT(controlAdde= d(Control *))); - connect(pulse, SIGNAL(controlRemoved(Control *)), this, SLOT(controlRe= moved(Control *))); + connect(pulse, SIGNAL(controlAdded(Control *)), this, SLOT(handleContr= olAdded(Control *))); + connect(pulse, SIGNAL(controlRemoved(Control *)), this, SLOT(handleCon= trolRemoved(Control *))); m_backends << pulse; pulse->open(); } @@ -53,14 +53,16 @@ QList BackendManager::groups() const return m_groups.values(); } = -void BackendManager::controlAdded(Control *control) +void BackendManager::handleControlAdded(Control *control) { m_groups[control->category()]->addControl(control); + emit controlAdded(control); } = -void BackendManager::controlRemoved(Control *control) +void BackendManager::handleControlRemoved(Control *control) { m_groups[control->category()]->removeControl(control); + emit controlRemoved(control); } = #include "BackendManager.moc" diff --git a/src/daemon2/BackendManager.h b/src/daemon2/BackendManager.h index 9ca4074..3ac2b47 100644 --- a/src/daemon2/BackendManager.h +++ b/src/daemon2/BackendManager.h @@ -33,9 +33,12 @@ public: static BackendManager *instance(); QList groups() const; ControlGroup *group(const QString &name) const; -private slots: +signals: void controlAdded(Control *control); void controlRemoved(Control *control); +private slots: + void handleControlAdded(Control *control); + void handleControlRemoved(Control *control); = private: BackendManager(); diff --git a/src/daemon2/KMixDApp.cpp b/src/daemon2/KMixDApp.cpp index 93ba0e3..ed3553e 100644 --- a/src/daemon2/KMixDApp.cpp +++ b/src/daemon2/KMixDApp.cpp @@ -29,9 +29,10 @@ = KMixDApp::KMixDApp(int &argc, char **argv) : QCoreApplication(argc, argv) + , m_master(0) { - // One way or another we need to create this to show up on DBus - BackendManager::instance(); + connect(BackendManager::instance(), SIGNAL(controlAdded(Control*)), th= is, SLOT(controlAdded(Control*))); + connect(BackendManager::instance(), SIGNAL(controlRemoved(Control*)), = this, SLOT(controlRemoved(Control*))); } = KMixDApp::~KMixDApp() @@ -48,7 +49,7 @@ int KMixDApp::start() return 1; } = -void KMixDApp::setMaster(const QString &masterID) +void KMixDApp::setMaster(int id) { Q_ASSERT(false); } @@ -64,17 +65,44 @@ QStringList KMixDApp::mixerGroups() const = QString KMixDApp::masterControl() const { - Q_ASSERT(false); - return QString(); + return QString("/controls/%1").arg(m_master->id()); } = int KMixDApp::masterVolume() const { - Q_ASSERT(false); + if (m_master) { + int sum; + for(int i =3D 0;ichannels();i++) { + sum+=3Dm_master->getVolume(i); + } + return sum/m_master->channels(); + } return 0; } = void KMixDApp::setMasterVolume(int v) { - Q_ASSERT(false); + if (m_master) { + for(int i =3D 0;ichannels();i++) { + m_master->setVolume(i, v); + } + } +} + +void KMixDApp::controlAdded(Control *control) +{ + if (control->category() =3D=3D Control::HardwareOutput) { + if (m_master) + disconnect(m_master, SIGNAL(volumeChanged(int)), this, SIGNAL(= masterVolumeChanged())); + m_master =3D control; + emit masterChanged(QString("/controls/%1").arg(m_master->id())); + connect(m_master, SIGNAL(volumeChanged(int)), this, SIGNAL(masterV= olumeChanged())); + } +} + +void KMixDApp::controlRemoved(Control *control) +{ + if (control =3D=3D m_master) { + m_master =3D 0; + } } diff --git a/src/daemon2/KMixDApp.h b/src/daemon2/KMixDApp.h index 76e2c30..27a8cb0 100644 --- a/src/daemon2/KMixDApp.h +++ b/src/daemon2/KMixDApp.h @@ -24,6 +24,8 @@ #include #include = +class Control; + class KMixDApp : public QCoreApplication { Q_OBJECT @@ -34,7 +36,7 @@ public: KMixDApp(int &argc, char **argv); ~KMixDApp(); int start(); - void setMaster(const QString &masterID); + void setMaster(int masterID); QStringList mixerGroups() const; QString masterControl() const; = @@ -43,6 +45,13 @@ public: signals: void groupAdded(const QString &name); void groupRemoved(const QString &name); + void masterChanged(const QString &path); + void masterVolumeChanged(); +private slots: + void controlAdded(Control *); + void controlRemoved(Control *); +private: + Control *m_master; }; = #endif diff --git a/src/dbus/org.kde.kmix.kmixd.xml b/src/dbus/org.kde.kmix.kmixd.= xml index 8c2b3a4..88c5401 100644 --- a/src/dbus/org.kde.kmix.kmixd.xml +++ b/src/dbus/org.kde.kmix.kmixd.xml @@ -5,8 +5,12 @@ - + + + + +