From dcbf76cb0b3dc7b32ad1c13e6cb7770db897c943 Mon Sep 17 00:00:00 2001 From: Vasily Date: Thu, 23 Jan 2020 15:32:01 +0100 Subject: [PATCH] Add audio profiles to new settings object API Audio profiles are not currently activated due to SteamVR changes. micVol has been changed to default initilize to 1.0f since that was being applied in the settings load anyway. --- src/tabcontrollers/AudioTabController.cpp | 104 +--------------------- src/tabcontrollers/AudioTabController.h | 53 +++++++++-- 2 files changed, 50 insertions(+), 107 deletions(-) diff --git a/src/tabcontrollers/AudioTabController.cpp b/src/tabcontrollers/AudioTabController.cpp index 5aae9ec..6d216b4 100644 --- a/src/tabcontrollers/AudioTabController.cpp +++ b/src/tabcontrollers/AudioTabController.cpp @@ -3,6 +3,7 @@ #include #include "../overlaycontroller.h" #include "../settings/settings.h" +#include "../settings/settings_object.h" #ifdef _WIN32 # include "audiomanager/AudioManagerWindows.h" #else @@ -672,111 +673,14 @@ void AudioTabController::findMicDeviceIndex( std::string id, bool notify ) } } -/*AUDIO PROFILE FUNCTIONS -The following section includes the code required to save and load Audio -Profiles. - -Saved Settings Include: -Playback Device -Mirror Device -Mirror Vol -Microphone -Microphone Volume -Profile Name - -*/ - -/* - Name: reloadAudioProfiles - - Inputs: args: none - other: Reads audioProfiles setting from file - - - Output: return:none - other:none - - Description: Clears working copy, and reloads from Settings file. - -*/ void AudioTabController::reloadAudioProfiles() { - audioProfiles.clear(); - auto settings = OverlayController::appSettings(); - settings->beginGroup( getSettingsName() ); - auto profileCount = settings->beginReadArray( "audioProfiles" ); - for ( int i = 0; i < profileCount; i++ ) - { - settings->setArrayIndex( i ); - audioProfiles.emplace_back(); - auto& entry = audioProfiles[static_cast( i )]; - entry.profileName - = settings->value( "profileName" ).toString().toStdString(); - entry.playbackName - = settings->value( "playbackName" ).toString().toStdString(); - entry.micName = settings->value( "micName" ).toString().toStdString(); - entry.mirrorName - = settings->value( "mirrorName" ).toString().toStdString(); - entry.micMute = settings->value( "micMute", false ).toBool(); - entry.mirrorMute = settings->value( "mirrorMute", false ).toBool(); - entry.mirrorVol = settings->value( "mirrorVol", 0.0 ).toFloat(); - entry.micVol = settings->value( "micVol", 1.0 ).toFloat(); - entry.defaultProfile - = settings->value( "defaultProfile", false ).toBool(); - entry.mirrorID = settings->value( "mirrorID" ).toString().toStdString(); - entry.recordingID - = settings->value( "recordingID" ).toString().toStdString(); - entry.playbackID - = settings->value( "playbackID" ).toString().toStdString(); - } - settings->endArray(); - settings->endGroup(); + settings::loadAllObjects( audioProfiles ); } -/* -Name: saveAudioProfile - -Inputs: args: none -other: none - - -Output: return: none -other: Writes audioProfiles setting to file - -Description: saves a copy of the audio profiles from working to Settings file. - -*/ void AudioTabController::saveAudioProfiles() { - auto settings = OverlayController::appSettings(); - settings->beginGroup( getSettingsName() ); - settings->beginWriteArray( "audioProfiles" ); - int i = 0; - for ( auto& p : audioProfiles ) - { - settings->setArrayIndex( i ); - settings->setValue( "profileName", - QString::fromStdString( p.profileName ) ); - settings->setValue( "playbackName", - QString::fromStdString( p.playbackName ) ); - settings->setValue( "micName", QString::fromStdString( p.micName ) ); - settings->setValue( "mirrorName", - QString::fromStdString( p.mirrorName ) ); - settings->setValue( "micMute", p.micMute ); - settings->setValue( "mirrorMute", p.mirrorMute ); - settings->setValue( "micVol", p.micVol ); - settings->setValue( "mirrorVol", p.mirrorVol ); - settings->setValue( "defaultProfile", p.defaultProfile ); - - settings->setValue( "playbackID", - QString::fromStdString( p.playbackID ) ); - settings->setValue( "mirrorID", QString::fromStdString( p.mirrorID ) ); - settings->setValue( "recordingID", - QString::fromStdString( p.recordingID ) ); - i++; - } - settings->endArray(); - settings->endGroup(); + settings::saveAllObjects( audioProfiles ); } /* @@ -838,7 +742,6 @@ void AudioTabController::addAudioProfile( QString name ) setAudioProfileDefault( false ); } saveAudioProfiles(); - OverlayController::appSettings()->sync(); emit audioProfilesUpdated(); emit audioProfileAdded(); } @@ -949,7 +852,6 @@ void AudioTabController::deleteAudioProfile( unsigned index ) } audioProfiles.erase( pos ); saveAudioProfiles(); - OverlayController::appSettings()->sync(); emit audioProfilesUpdated(); } } diff --git a/src/tabcontrollers/AudioTabController.h b/src/tabcontrollers/AudioTabController.h index 2f6950f..b505eff 100644 --- a/src/tabcontrollers/AudioTabController.h +++ b/src/tabcontrollers/AudioTabController.h @@ -6,6 +6,7 @@ #include "audiomanager/AudioManager.h" #include #include "../utils/FrameRateUtils.h" +#include "../settings/settings_object.h" class QQuickWindow; // application namespace @@ -14,7 +15,7 @@ namespace advsettings // forward declaration class OverlayController; -struct AudioProfile +struct AudioProfile : settings::ISettingsObject { std::string profileName; std::string playbackName; @@ -24,10 +25,54 @@ struct AudioProfile std::string playbackID; std::string mirrorID; float mirrorVol = 0.0; - float micVol = 0.0; + float micVol = 1.0; bool micMute = false; bool mirrorMute = false; bool defaultProfile = false; + + virtual settings::SettingsObjectData saveSettings() const + { + settings::SettingsObjectData o; + + o.addValue( profileName ); + o.addValue( playbackName ); + o.addValue( mirrorName ); + o.addValue( micName ); + o.addValue( recordingID ); + o.addValue( playbackID ); + o.addValue( mirrorID ); + + o.addValue( static_cast( mirrorVol ) ); + o.addValue( static_cast( micVol ) ); + + o.addValue( micMute ); + o.addValue( mirrorMute ); + o.addValue( defaultProfile ); + + return o; + } + + virtual void loadSettings( settings::SettingsObjectData& obj ) + { + profileName = obj.getNextValueOrDefault( "" ); + playbackName = obj.getNextValueOrDefault( "" ); + mirrorName = obj.getNextValueOrDefault( "" ); + micName = obj.getNextValueOrDefault( "" ); + recordingID = obj.getNextValueOrDefault( "" ); + playbackID = obj.getNextValueOrDefault( "" ); + mirrorID = obj.getNextValueOrDefault( "" ); + + mirrorVol = static_cast( obj.getNextValueOrDefault( 0.0 ) ); + micVol = static_cast( obj.getNextValueOrDefault( 1.0 ) ); + micMute = obj.getNextValueOrDefault( false ); + mirrorMute = obj.getNextValueOrDefault( false ); + defaultProfile = obj.getNextValueOrDefault( false ); + } + + virtual std::string settingsName() const + { + return "AudioTabController::AudioProfile"; + } }; class AudioTabController : public QObject @@ -97,10 +142,6 @@ private: std::recursive_mutex eventLoopMutex; - QString getSettingsName() - { - return "audioSettings"; - } void onPttStart(); void onPttStop(); void onPttEnabled();