From kde-commits Tue Jan 24 23:03:51 2012 From: Igor Poboiko Date: Tue, 24 Jan 2012 23:03:51 +0000 To: kde-commits Subject: KDE/kdemultimedia/kmix Message-Id: <20120124230351.235EAAC892 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=132744641417827 SVN commit 1275737 by poboiko: Record source (the "capture" switch) can be changed from plasma dataengine now M +16 -17 dbus/dbuscontrolwrapper.cpp M +2 -0 dbus/dbuscontrolwrapper.h M +1 -0 dbus/org.kde.kmix.control.xml M +5 -0 plasma/engine/mixer.operations M +21 -17 plasma/engine/mixerengine.cpp M +1 -0 plasma/engine/mixerengine.h M +5 -1 plasma/engine/mixerservice.cpp --- trunk/KDE/kdemultimedia/kmix/dbus/dbuscontrolwrapper.cpp #1275736:1275737 @@ -24,8 +24,6 @@ #include "core/mixer.h" #include "core/volume.h" -#include - DBusControlWrapper::DBusControlWrapper(MixDevice* parent, QString path) : QObject(parent) , m_dbusPath(path) @@ -65,7 +63,8 @@ int DBusControlWrapper::volume() { - return m_md->playbackVolume().getAvgVolumePercent(Volume::MALL); + Volume &useVolume = (m_md->playbackVolume().count() != 0) ? m_md->playbackVolume() : m_md->captureVolume(); + return useVolume.getAvgVolumePercent(Volume::MALL); } void DBusControlWrapper::increaseVolume() @@ -80,30 +79,27 @@ long DBusControlWrapper::absoluteVolumeMin() { - // @todo Is hardcoded do playbackVolume - return m_md->playbackVolume().minVolume(); + Volume &useVolume = (m_md->playbackVolume().count() != 0) ? m_md->playbackVolume() : m_md->captureVolume(); + return useVolume.minVolume(); } long DBusControlWrapper::absoluteVolumeMax() { - // @todo Is hardcoded do playbackVolume - return m_md->playbackVolume().maxVolume(); + Volume &useVolume = (m_md->playbackVolume().count() != 0) ? m_md->playbackVolume() : m_md->captureVolume(); + return useVolume.maxVolume(); } void DBusControlWrapper::setAbsoluteVolume(long absoluteVolume) { - Volume& volP = m_md->playbackVolume(); - Volume& volC = m_md->captureVolume(); - volP.setAllVolumes( absoluteVolume ); - volC.setAllVolumes( absoluteVolume ); + m_md->playbackVolume().setAllVolumes( absoluteVolume ); + m_md->captureVolume().setAllVolumes( absoluteVolume ); m_md->mixer()->commitVolumeChange( m_md ); } long DBusControlWrapper::absoluteVolume() { - // @todo hardcoded - Volume& vol = m_md->playbackVolume(); - qreal avgVol= vol.getAvgVolume( Volume::MMAIN ); + Volume &useVolume = (m_md->playbackVolume().count() != 0) ? m_md->playbackVolume() : m_md->captureVolume(); + qreal avgVol= useVolume.getAvgVolume( Volume::MALL ); long avgVolRounded = avgVol <0 ? avgVol-.5 : avgVol+.5; return avgVolRounded; } @@ -137,8 +133,11 @@ void DBusControlWrapper::setRecordSource(bool on) { - MixDevice* md = m_md->mixer()->getMixdeviceById(m_md->id()); - if ( md != 0 ) - md->setRecSource(on); + m_md->setRecSource(on); m_md->mixer()->commitVolumeChange( m_md ); } + +bool DBusControlWrapper::hasCaptureSwitch() +{ + return m_md->captureVolume().hasSwitch(); +} --- trunk/KDE/kdemultimedia/kmix/dbus/dbuscontrolwrapper.h #1275736:1275737 @@ -38,6 +38,7 @@ Q_PROPERTY(bool mute READ isMuted WRITE setMute) Q_PROPERTY(bool recordSource READ isRecordSource WRITE setRecordSource) Q_PROPERTY(bool canMute READ canMute) + Q_PROPERTY(bool hasCaptureSwitch READ hasCaptureSwitch) public: DBusControlWrapper(MixDevice* parent, QString path); @@ -65,6 +66,7 @@ void setMute(bool muted); bool isMuted(); + bool hasCaptureSwitch(); void setRecordSource(bool on); bool isRecordSource(); }; --- trunk/KDE/kdemultimedia/kmix/dbus/org.kde.kmix.control.xml #1275736:1275737 @@ -8,6 +8,7 @@ + --- trunk/KDE/kdemultimedia/kmix/plasma/engine/mixer.operations #1275736:1275737 @@ -12,4 +12,9 @@ + + + + + --- trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerengine.cpp #1275736:1275737 @@ -118,6 +118,8 @@ Q_FOREACH( QString controlPath, curmi->iface->controls() ) createControlInfo( curmi->id, controlPath ); } + // Update "Mixers" source + getMixersData(); } void MixerEngine::clearInternalData(bool removeSources) @@ -162,7 +164,6 @@ QStringList mixerIds; if ( interface->isServiceRegistered( KMIX_DBUS_SERVICE ) ) { - // 'Unused' flag is used for cleanup Q_FOREACH( MixerInfo* mi, m_mixers ) mixerIds.append( mi->id ); setData( "Mixers", "Mixers", mixerIds ); @@ -234,14 +235,23 @@ return false; // Setting data curci->updateRequired = true; - setData( source, "Can Be Muted", curci->iface->canMute() ); - setData( source, "Volume", curci->iface->volume() ); - setData( source, "Mute", curci->iface->mute() ); - setData( source, "Readable Name", curci->iface->readableName() ); - setData( source, "Icon", KIcon(curci->iface->iconName()) ); + setControlData( curci ); return true; } +void MixerEngine::setControlData(ControlInfo* ci) +{ + QString source = ci->mixerId + '/' + ci->id; + setData( source, "Volume", ci->iface->volume() ); + setData( source, "Mute", ci->iface->mute() ); + setData( source, "Can Be Muted", ci->iface->canMute() ); + setData( source, "Readable Name", ci->iface->readableName() ); + setData( source, "Icon", KIcon(ci->iface->iconName()) ); + setData( source, "Record Source", ci->iface->recordSource() ); + setData( source, "Has Capture Switch", ci->iface->hasCaptureSwitch() ); +} + + void MixerEngine::slotServiceRegistered( const QString &serviceName) { // Let's give KMix some time to load @@ -253,7 +263,8 @@ { if ( serviceName == KMIX_DBUS_SERVICE ) clearInternalData(true); - removeData( "Mixers", "Mixers" ); + // Updating 'Mixers' source + getMixersData(); } void MixerEngine::slotControlChanged() @@ -265,14 +276,8 @@ // Updating all controls that might change Q_FOREACH( ControlInfo* ci, m_controls.values( curmi->id ) ) if ( ci->updateRequired ) - { - QString source = ci->mixerId + '/' + ci->id; - setData( source, "Can Be Muted", ci->iface->canMute() ); - setData( source, "Volume", ci->iface->volume() ); - setData( source, "Mute", ci->iface->mute() ); - setData( source, "Readable Name", ci->iface->readableName() ); + setControlData( ci ); } -} void MixerEngine::slotControlsReconfigured() { @@ -312,9 +317,8 @@ } if ( curmi->updateRequired ) { - QString source = curmi->id; - setData( source, "Controls", controlIds ); - setData( source, "Controls Readable Names", controlReadableNames ); + setData( curmi->id, "Controls", controlIds ); + setData( curmi->id, "Controls Readable Names", controlReadableNames ); } } --- trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerengine.h #1275736:1275737 @@ -87,6 +87,7 @@ bool getMixersData(); bool getMixerData( const QString &source ); bool getControlData( const QString &source ); + void setControlData( ControlInfo *ci ); private slots: void getInternalData(); void updateInternalMixersData(); --- trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerservice.cpp #1275736:1275737 @@ -60,7 +60,11 @@ setResult( res ); return; } - + else if ( operation == "setRecordSource" ) { + bool res = m_service->iface()->setProperty( "recordSource", parameters().value("recordSource").toBool() ); + setResult( res ); + return; } +} #include "mixerservice.moc"