[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