1 /*
2  * KMix -- KDE's full featured mini mixer
3  *
4  * Copyright 1996-2004 Christian Esken <esken@kde.org>
5  * Copyright 2011 Igor Poboiko <igor.poboiko@gmail.com>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this program; if not, write to the Free
19  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  */
21 
22 #include "dbuscontrolwrapper.h"
23 #include "controladaptor.h"
24 #include "core/mixer.h"
25 #include "core/volume.h"
26 
DBusControlWrapper(shared_ptr<MixDevice> parent,const QString & path)27 DBusControlWrapper::DBusControlWrapper(shared_ptr<MixDevice> parent, const QString& path)
28 	: QObject(0)
29 {
30 //	qCDebug(KMIX_LOG) << "QDBusConnection for control created" << path;
31 	m_md = parent;
32 	new ControlAdaptor( this );
33 	QDBusConnection::sessionBus().registerObject( path, this );
34 }
35 
~DBusControlWrapper()36 DBusControlWrapper::~DBusControlWrapper()
37 {
38 }
39 
id()40 QString DBusControlWrapper::id()
41 {
42 	return m_md->id();
43 }
44 
readableName()45 QString DBusControlWrapper::readableName()
46 {
47 	return m_md->readableName();
48 }
49 
iconName()50 QString DBusControlWrapper::iconName()
51 {
52 	return m_md->iconName();
53 }
54 
setVolume(int percentage)55 void DBusControlWrapper::setVolume(int percentage)
56 {
57 	Volume& volP = m_md->playbackVolume();
58 	Volume& volC = m_md->captureVolume();
59 	volP.setAllVolumes( volP.minVolume() + ((percentage * volP.volumeSpan()) / 100) );
60 	volC.setAllVolumes( volC.minVolume() + ((percentage * volC.volumeSpan()) / 100) );
61 	m_md->mixer()->commitVolumeChange( m_md );
62 }
63 
volume()64 int DBusControlWrapper::volume()
65 {
66 	Volume &useVolume = (m_md->playbackVolume().count() != 0) ? m_md->playbackVolume() : m_md->captureVolume();
67 	return useVolume.getAvgVolumePercent(Volume::MALL);
68 }
69 
increaseVolume()70 void DBusControlWrapper::increaseVolume()
71 {
72 	m_md->mixer()->increaseVolume(m_md->id());
73 }
74 
decreaseVolume()75 void DBusControlWrapper::decreaseVolume()
76 {
77 	m_md->mixer()->decreaseVolume(m_md->id());
78 }
79 
absoluteVolumeMin()80 long DBusControlWrapper::absoluteVolumeMin()
81 {
82 	Volume &useVolume = (m_md->playbackVolume().count() != 0) ? m_md->playbackVolume() : m_md->captureVolume();
83 	return useVolume.minVolume();
84 }
85 
absoluteVolumeMax()86 long DBusControlWrapper::absoluteVolumeMax()
87 {
88 	Volume &useVolume = (m_md->playbackVolume().count() != 0) ? m_md->playbackVolume() : m_md->captureVolume();
89 	return useVolume.maxVolume();
90 }
91 
setAbsoluteVolume(long absoluteVolume)92 void DBusControlWrapper::setAbsoluteVolume(long absoluteVolume)
93 {
94 	m_md->playbackVolume().setAllVolumes( absoluteVolume );
95 	m_md->captureVolume().setAllVolumes( absoluteVolume );
96 	m_md->mixer()->commitVolumeChange( m_md );
97 }
98 
absoluteVolume()99 long DBusControlWrapper::absoluteVolume()
100 {
101 	Volume &useVolume = (m_md->playbackVolume().count() != 0) ? m_md->playbackVolume() : m_md->captureVolume();
102 	qreal avgVol= useVolume.getAvgVolume( Volume::MALL );
103 	long avgVolRounded = avgVol <0 ? avgVol-.5 : avgVol+.5;
104 	return avgVolRounded;
105 }
106 
setMute(bool muted)107 void DBusControlWrapper::setMute(bool muted)
108 {
109 	m_md->setMuted( muted );
110 	m_md->mixer()->commitVolumeChange( m_md );
111 }
112 
toggleMute()113 void DBusControlWrapper::toggleMute()
114 {
115 	m_md->toggleMute();
116 	m_md->mixer()->commitVolumeChange( m_md );
117 }
118 
canMute()119 bool DBusControlWrapper::canMute()
120 {
121 	return m_md->hasMuteSwitch();
122 }
123 
isMuted()124 bool DBusControlWrapper::isMuted()
125 {
126 	return m_md->isMuted();
127 }
128 
isRecordSource()129 bool DBusControlWrapper::isRecordSource()
130 {
131 	return m_md->isRecSource();
132 }
133 
setRecordSource(bool on)134 void DBusControlWrapper::setRecordSource(bool on)
135 {
136 	m_md->setRecSource(on);
137 	m_md->mixer()->commitVolumeChange( m_md );
138 }
139 
hasCaptureSwitch()140 bool DBusControlWrapper::hasCaptureSwitch()
141 {
142 	return m_md->captureVolume().hasSwitch();
143 }
144 
145