diff --git a/src/tabcontrollers/AudioProfileController.cpp b/src/tabcontrollers/AudioProfileController.cpp deleted file mode 100644 index 3fc9e7f..0000000 --- a/src/tabcontrollers/AudioProfileController.cpp +++ /dev/null @@ -1,107 +0,0 @@ -#include "AudioProfileController.h" -#include -#include -#include "../overlaycontroller.h" - -// application namespace -namespace advsettings { - - - //TODO DOCS/verify / other parts - void AudioProfileController::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[i]; - entry.profileName = settings->value("profileName").toString().toStdString(); - } - settings->endArray(); - settings->endGroup(); - } - - void AudioProfileController::saveAudioProfiles() { - auto settings = OverlayController::appSettings(); - settings->beginGroup(getSettingsName()); - settings->beginWriteArray("audioProfiles"); - unsigned i = 0; - for (auto& p : audioProfiles) { - settings->setArrayIndex(i); - settings->setValue("profileName", QString::fromStdString(p.profileName)); - i++; - } - settings->endArray(); - settings->endGroup(); - } - - - - - void AudioProfileController::addAudioProfile(QString name) { - AudioProfile* profile = nullptr; - for (auto& p : audioProfiles) { - if (p.profileName.compare(name.toStdString()) == 0) { - profile = &p; - break; - } - } - if (!profile) { - auto i = audioProfiles.size(); - audioProfiles.emplace_back(); - profile = &audioProfiles[i]; - } - profile->profileName = name.toStdString(); - saveAudioProfiles(); - OverlayController::appSettings()->sync(); - emit audioProfilesUpdated(); - } - - void AudioProfileController::applyAudioProfile(unsigned index) { - //DO i need? - std::lock_guard lock(eventLoopMutexAudio); - if (index < audioProfiles.size()) { - auto& profile = audioProfiles[index]; - //TODO apply logic here - //setPttShowNotification(profile.showNotification); - - } - } - - void AudioProfileController::deleteAudioProfile(unsigned index) { - if (index < audioProfiles.size()) { - auto pos = audioProfiles.begin() + index; - audioProfiles.erase(pos); - saveAudioProfiles(); - OverlayController::appSettings()->sync(); - emit audioProfilesUpdated(); - } - } - - - - unsigned AudioProfileController::getAudioProfileCount() { - return (unsigned)audioProfiles.size(); - } - - QString AudioProfileController::getAudioProfileName(unsigned index) { - if (index < audioProfiles.size()) { - return QString::fromStdString(audioProfiles[index].profileName); - } - return ""; - } - - - - - /*void logControllerState(const vr::VRControllerState_t& state, const std::string& prefix) { - if (state.ulButtonPressed & vr::ButtonMaskFromId(vr::k_EButton_ApplicationMenu)) { - LOG(INFO) << prefix << vr::VRSystem()->GetButtonIdNameFromEnum(vr::k_EButton_ApplicationMenu) << " pressed"; - } - } - */ - -} -//namespace advconfig \ No newline at end of file diff --git a/src/tabcontrollers/AudioProfileController.h b/src/tabcontrollers/AudioProfileController.h deleted file mode 100644 index 61a3741..0000000 --- a/src/tabcontrollers/AudioProfileController.h +++ /dev/null @@ -1,67 +0,0 @@ - -#pragma once - -#include -#include -#include -#include -#include -#include -#include "PttController.h" -//#include "AudioTabController.h" - -class QQuickWindow; -// application namespace -namespace advsettings { - - // forward declaration - class OverlayController; - - struct AudioProfile { - std::string profileName; - std::string playbackName; - std::string mirrorName; - std::string micName; - float mirrorVol = 0.0; - float micVol = 0.0; - bool micMute = false; - bool mirrorMute = false; - //TODO all the settings!!! huehue - //bool showNotification = false; - }; - - - class AudioProfileController : public PttController { - Q_OBJECT - //Q_PROPERTY(bool pttActive READ pttActive NOTIFY pttActiveChanged) - //NEED TO DOUBLE CHECK THIS IS CORRECT!? - - protected: - - std::vector audioProfiles; - - protected: - virtual QString getSettingsName() = 0; - //may have to change to prevent issues - std::recursive_mutex eventLoopMutexAudio; - - public: - - void reloadAudioProfiles(); - void saveAudioProfiles(); - - //TODO - - Q_INVOKABLE unsigned getAudioProfileCount(); - Q_INVOKABLE QString getAudioProfileName(unsigned index); - - public slots: - void addAudioProfile(QString name); - void applyAudioProfile(unsigned index); - void deleteAudioProfile(unsigned index); - - signals: - void audioProfilesUpdated(); - }; - -} // namespace advsettings diff --git a/src/tabcontrollers/AudioTabController.cpp b/src/tabcontrollers/AudioTabController.cpp index f48f393..81da845 100644 --- a/src/tabcontrollers/AudioTabController.cpp +++ b/src/tabcontrollers/AudioTabController.cpp @@ -69,6 +69,138 @@ namespace advsettings { } } + + + /*AUDIO PROFILE FUNCTIONS + The functions in this section pertain to saving the Audio settings. + Saved Settings Include: + Playback Device + Mirror Device + Mirror Vol + Microphone + Microphone Volume + Profile Name + + */ + + 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[i]; + entry.profileName = settings->value("profileName").toString().toStdString(); + entry.playbackName = settings->value("playbackName").toString().toStdString(); + } + settings->endArray(); + settings->endGroup(); + } + + void AudioTabController::saveAudioProfiles() { + auto settings = OverlayController::appSettings(); + settings->beginGroup(getSettingsName()); + settings->beginWriteArray("audioProfiles"); + unsigned i = 0; + for (auto& p : audioProfiles) { + settings->setArrayIndex(i); + settings->setValue("profileName", QString::fromStdString(p.profileName)); + settings->setValue("playbackName", QString::fromStdString(p.playbackName)); + i++; + } + settings->endArray(); + settings->endGroup(); + } + + + + + void AudioTabController::addAudioProfile(QString name) { + AudioProfile* profile = nullptr; + for (auto& p : audioProfiles) { + if (p.profileName.compare(name.toStdString()) == 0) { + profile = &p; + break; + } + } + if (!profile) { + auto i = audioProfiles.size(); + audioProfiles.emplace_back(); + profile = &audioProfiles[i]; + } + profile->profileName = name.toStdString(); + profile->playbackName = getPlaybackDeviceName(m_playbackDeviceIndex).toStdString(); + saveAudioProfiles(); + OverlayController::appSettings()->sync(); + emit audioProfilesUpdated(); + } + + //TODO playback DevicE INDEX FIND UGHU + void AudioTabController::applyAudioProfile(unsigned index) { + //DO i need? + //std::lock_guard lock(eventLoopMutex); + if (index < audioProfiles.size()) { + auto& profile = audioProfiles[index]; + setPlaybackDeviceIndex(findPlaybackDeviceIndex(profile.playbackName, true), true); + //TODO apply logic here + //setPttShowNotification(profile.showNotification); + //reloadAudioProfiles(); + + } + } + + void AudioTabController::deleteAudioProfile(unsigned index) { + if (index < audioProfiles.size()) { + auto pos = audioProfiles.begin() + index; + audioProfiles.erase(pos); + saveAudioProfiles(); + OverlayController::appSettings()->sync(); + emit audioProfilesUpdated(); + } + } + + + + unsigned AudioTabController::getAudioProfileCount() { + return (unsigned)audioProfiles.size(); + } + + QString AudioTabController::getAudioProfileName(unsigned index) { + if (index < audioProfiles.size()) { + return QString::fromStdString(audioProfiles[index].profileName); + } + return ""; + } + + + + /* ---------------------------*/ + + + /*Playback Switch*/ + + void AudioTabController::setPlaybackDeviceControl(int index, bool notify) { + if (index < m_playbackDevices.size() && index != m_mirrorDeviceIndex) { + vr::EVRSettingsError vrSettingsError; + vr::VRSettings()->SetString(vr::k_pch_audio_Section, vr::k_pch_audio_OnPlaybackDevice_String, m_playbackDevices[index].first.c_str(), &vrSettingsError); + if (vrSettingsError != vr::VRSettingsError_None) { + LOG(WARNING) << "Could not write \"" << vr::k_pch_audio_OnPlaybackDevice_String << "\" setting: " << vr::VRSettings()->GetSettingsErrorNameFromEnum(vrSettingsError); + } + else { + vr::VRSettings()->Sync(); + audioManager->setPlaybackDevice(m_playbackDevices[index].first, notify); + emit playbackDeviceIndexChanged(m_playbackDeviceIndex); + } + } + else if (notify) { + emit playbackDeviceIndexChanged(m_playbackDeviceIndex); + } + } + + /*----------------*/ + void AudioTabController::reloadAudioSettings() { std::lock_guard lock(eventLoopMutex); auto settings = OverlayController::appSettings(); @@ -348,6 +480,7 @@ namespace advsettings { if (index != m_playbackDeviceIndex) { if (index < m_playbackDevices.size() && index != m_mirrorDeviceIndex) { vr::EVRSettingsError vrSettingsError; + //Applys Audio Switch IN VR vr::VRSettings()->SetString(vr::k_pch_audio_Section, vr::k_pch_audio_OnPlaybackDevice_String, m_playbackDevices[index].first.c_str(), &vrSettingsError); if (vrSettingsError != vr::VRSettingsError_None) { LOG(WARNING) << "Could not write \"" << vr::k_pch_audio_OnPlaybackDevice_String << "\" setting: " << vr::VRSettings()->GetSettingsErrorNameFromEnum(vrSettingsError); diff --git a/src/tabcontrollers/AudioTabController.h b/src/tabcontrollers/AudioTabController.h index 8324606..f490ed6 100644 --- a/src/tabcontrollers/AudioTabController.h +++ b/src/tabcontrollers/AudioTabController.h @@ -3,7 +3,7 @@ #include "AudioManager.h" #include "PttController.h" -#include "AudioProfileController.h" +//#include "AudioProfileController.h" #include class QQuickWindow; @@ -13,8 +13,21 @@ namespace advsettings { // forward declaration class OverlayController; + struct AudioProfile { + std::string profileName; + std::string playbackName; + std::string mirrorName; + std::string micName; + float mirrorVol = 0.0; + float micVol = 0.0; + bool micMute = false; + bool mirrorMute = false; + //TODO all the settings!!! huehue + //bool showNotification = false; + }; - class AudioTabController : public AudioProfileController { + + class AudioTabController : public PttController { Q_OBJECT Q_PROPERTY(int playbackDeviceIndex READ playbackDeviceIndex WRITE setPlaybackDeviceIndex NOTIFY playbackDeviceIndexChanged) Q_PROPERTY(int mirrorDeviceIndex READ mirrorDeviceIndex WRITE setMirrorDeviceIndex NOTIFY mirrorDeviceIndexChanged) @@ -68,7 +81,14 @@ namespace advsettings { void findMirrorDeviceIndex(std::string id, bool notify = true); void findMicDeviceIndex(std::string id, bool notify = true); + void setPlaybackDeviceControl(int index, bool notify = true); + + std::vector audioProfiles; + //std::recursive_mutex eventLoopMutexAudio; + public: + + void initStage1(); void initStage2(OverlayController* parent, QQuickWindow* widget); @@ -89,12 +109,19 @@ namespace advsettings { bool micProximitySensorCanMute() const; bool micReversePtt() const; + void reloadAudioProfiles(); + void saveAudioProfiles(); + Q_INVOKABLE int getPlaybackDeviceCount(); Q_INVOKABLE QString getPlaybackDeviceName(int index); Q_INVOKABLE int getRecordingDeviceCount(); Q_INVOKABLE QString getRecordingDeviceName(int index); + //TODO check if needed? + Q_INVOKABLE unsigned getAudioProfileCount(); + Q_INVOKABLE QString getAudioProfileName(unsigned index); + void onNewRecordingDevice(); void onNewPlaybackDevice(); void onNewMirrorDevice(); @@ -113,6 +140,10 @@ namespace advsettings { void setMirrorDeviceIndex(int value, bool notify = true); void setMicDeviceIndex(int value, bool notify = true); + void addAudioProfile(QString name); + void applyAudioProfile(unsigned index); + void deleteAudioProfile(unsigned index); + signals: void playbackDeviceIndexChanged(int index); @@ -128,6 +159,8 @@ namespace advsettings { void playbackDeviceListChanged(); void recordingDeviceListChanged(); + + void audioProfilesUpdated(); }; } // namespace advsettings diff --git a/src/tabcontrollers/PttController.cpp b/src/tabcontrollers/PttController.cpp index 89e891f..2fa0a30 100644 --- a/src/tabcontrollers/PttController.cpp +++ b/src/tabcontrollers/PttController.cpp @@ -239,7 +239,6 @@ namespace advsettings { } void PttController::addPttProfile(QString name) { - int a = 0; PttProfile* profile = nullptr; for (auto& p : pttProfiles) { if (p.profileName.compare(name.toStdString()) == 0) {