[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kmix/kmix-improvements] src: Implement master controls
From: Trever Fischer <tdfischer () fedoraproject ! org>
Date: 2012-09-26 1:35:51
Message-ID: 20120926013551.63253A63A6 () git ! kde ! org
[Download RAW message or body]
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] = new ControlGroup("Hardware Input");
m_groups[Control::HardwareOutput] = new ControlGroup("Hardware Output");
Backend *pulse = new Backends::PulseAudio(this);
- connect(pulse, SIGNAL(controlAdded(Control *)), this, SLOT(controlAdded(Control \
*)));
- connect(pulse, SIGNAL(controlRemoved(Control *)), this, \
SLOT(controlRemoved(Control *))); + connect(pulse, SIGNAL(controlAdded(Control \
*)), this, SLOT(handleControlAdded(Control *))); + connect(pulse, \
SIGNAL(controlRemoved(Control *)), this, SLOT(handleControlRemoved(Control *))); \
m_backends << pulse; pulse->open();
}
@@ -53,14 +53,16 @@ QList<ControlGroup*> 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<ControlGroup*> 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*)), this, \
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 = 0;i<m_master->channels();i++) {
+ sum+=m_master->getVolume(i);
+ }
+ return sum/m_master->channels();
+ }
return 0;
}
void KMixDApp::setMasterVolume(int v)
{
- Q_ASSERT(false);
+ if (m_master) {
+ for(int i = 0;i<m_master->channels();i++) {
+ m_master->setVolume(i, v);
+ }
+ }
+}
+
+void KMixDApp::controlAdded(Control *control)
+{
+ if (control->category() == Control::HardwareOutput) {
+ if (m_master)
+ disconnect(m_master, SIGNAL(volumeChanged(int)), this, \
SIGNAL(masterVolumeChanged())); + m_master = control;
+ emit masterChanged(QString("/controls/%1").arg(m_master->id()));
+ connect(m_master, SIGNAL(volumeChanged(int)), this, \
SIGNAL(masterVolumeChanged())); + }
+}
+
+void KMixDApp::controlRemoved(Control *control)
+{
+ if (control == m_master) {
+ m_master = 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 <QtCore/QCoreApplication>
#include <QtCore/QStringList>
+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 @@
<property access="read" type="as" name="mixerGroups"/>
<property access="read" type="s" name="masterControl"/>
<method name="setMaster">
- <arg name="control" type="s" direction="in"/>
+ <arg name="control" type="i" direction="in"/>
</method>
+ <signal name="masterChanged">
+ <arg name="id" type="s"/>
+ </signal>
+ <signal name="masterVolumeChanged"/>
<property access="readwrite" name="masterVolume" type="i">
<signal name="groupAdded">
<arg name="name" type="s"/>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic