From 78f411e9df1b17c7e93c48c846057c2940891249 Mon Sep 17 00:00:00 2001 From: ykeara Date: Thu, 20 Dec 2018 14:35:55 -0600 Subject: [PATCH] Audio profile Save implemented no logic --- advancedSettings.pro | 110 +++++++++++++++++- src/res/qml/AudioPage.qml | 24 +++- src/tabcontrollers/AudioProfileController.cpp | 107 +++++++++++++++++ src/tabcontrollers/AudioProfileController.h | 67 +++++++++++ src/tabcontrollers/AudioTabController.cpp | 1 + src/tabcontrollers/AudioTabController.h | 4 +- src/tabcontrollers/PttController.cpp | 1 + 7 files changed, 305 insertions(+), 9 deletions(-) create mode 100644 src/tabcontrollers/AudioProfileController.cpp create mode 100644 src/tabcontrollers/AudioProfileController.h diff --git a/advancedSettings.pro b/advancedSettings.pro index e6961cf..c385302 100644 --- a/advancedSettings.pro +++ b/advancedSettings.pro @@ -27,7 +27,38 @@ SOURCES += src/main.cpp\ src/tabcontrollers/AccessibilityTabController.cpp \ src/utils/ChaperoneUtils.cpp \ src/tabcontrollers/audiomanager/AudioManagerDummy.cpp \ - src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp + src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp \ + release/moc_AccessibilityTabController.cpp \ + release/moc_AudioTabController.cpp \ + release/moc_ChaperoneTabController.cpp \ + release/moc_FixFloorTabController.cpp \ + release/moc_MoveCenterTabController.cpp \ + release/moc_overlaycontroller.cpp \ + release/moc_PttController.cpp \ + release/moc_ReviveTabController.cpp \ + release/moc_SettingsTabController.cpp \ + release/moc_StatisticsTabController.cpp \ + release/moc_SteamVRTabController.cpp \ + release/moc_UtilitiesTabController.cpp \ + src/tabcontrollers/audiomanager/AudioManagerDummy.cpp \ + src/tabcontrollers/audiomanager/AudioManagerWindows.cpp \ + src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp \ + src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp \ + src/tabcontrollers/AccessibilityTabController.cpp \ + src/tabcontrollers/AudioTabController.cpp \ + src/tabcontrollers/ChaperoneTabController.cpp \ + src/tabcontrollers/FixFloorTabController.cpp \ + src/tabcontrollers/MoveCenterTabController.cpp \ + src/tabcontrollers/PttController.cpp \ + src/tabcontrollers/ReviveTabController.cpp \ + src/tabcontrollers/SettingsTabController.cpp \ + src/tabcontrollers/StatisticsTabController.cpp \ + src/tabcontrollers/SteamVRTabController.cpp \ + src/tabcontrollers/UtilitiesTabController.cpp \ + src/utils/ChaperoneUtils.cpp \ + src/main.cpp \ + src/overlaycontroller.cpp \ + src/tabcontrollers/AudioProfileController.cpp HEADERS += src/overlaycontroller.h \ src/logging.h \ @@ -47,7 +78,38 @@ HEADERS += src/overlaycontroller.h \ src/utils/Matrix.h \ src/utils/ChaperoneUtils.h \ src/tabcontrollers/audiomanager/AudioManagerDummy.h \ - src/tabcontrollers/keyboardinput/KeyboardInputDummy.h + src/tabcontrollers/keyboardinput/KeyboardInputDummy.h \ + release/moc_predefs.h \ + src/tabcontrollers/audiomanager/AudioManagerDummy.h \ + src/tabcontrollers/audiomanager/AudioManagerWindows.h \ + src/tabcontrollers/audiomanager/IPolicyConfig.h \ + src/tabcontrollers/keyboardinput/KeyboardInputDummy.h \ + src/tabcontrollers/keyboardinput/KeyboardInputWindows.h \ + src/tabcontrollers/AccessibilityTabController.h \ + src/tabcontrollers/AudioManager.h \ + src/tabcontrollers/AudioTabController.h \ + src/tabcontrollers/ChaperoneTabController.h \ + src/tabcontrollers/FixFloorTabController.h \ + src/tabcontrollers/KeyboardInput.h \ + src/tabcontrollers/MoveCenterTabController.h \ + src/tabcontrollers/PttController.h \ + src/tabcontrollers/ReviveTabController.h \ + src/tabcontrollers/SettingsTabController.h \ + src/tabcontrollers/StatisticsTabController.h \ + src/tabcontrollers/SteamVRTabController.h \ + src/tabcontrollers/UtilitiesTabController.h \ + src/utils/ChaperoneUtils.h \ + src/utils/Matrix.h \ + src/logging.h \ + src/overlaycontroller.h \ + third-party/easylogging++/easylogging++.h \ + third-party/openvr/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h \ + third-party/openvr/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h \ + third-party/openvr/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h \ + third-party/openvr/headers/openvr.h \ + third-party/openvr/headers/openvr_capi.h \ + third-party/openvr/headers/openvr_driver.h \ + src/tabcontrollers/AudioProfileController.h win32 { SOURCES += src/tabcontrollers/audiomanager/AudioManagerWindows.cpp \ @@ -65,3 +127,47 @@ LIBS += -lopenvr_api win32:DESTDIR = bin/win64/AdvancedSettings unix:DESTDIR = bin/linux/AdvancedSettings + +DISTFILES += \ + src/res/sounds/alarm01.wav \ + src/res/qml/ptt_notification.png \ + src/res/battery_0.png \ + src/res/battery_1.png \ + src/res/battery_2.png \ + src/res/battery_3.png \ + src/res/battery_4.png \ + src/res/battery_5.png \ + src/res/thumbicon.png \ + src/res/qml/backarrow.svg \ + src/res/qml/check.svg \ + src/res/qml/mic_off.svg \ + src/res/qml/mic_on.svg \ + src/res/qml/ptt_notification.svg \ + src/res/qml/speaker_off.svg \ + src/res/qml/speaker_on.svg \ + src/res/qml/qmldir \ + src/res/qml/AccessibilityPage.qml \ + src/res/qml/AudioPage.qml \ + src/res/qml/ChaperonePage.qml \ + src/res/qml/ChaperoneWarningsPage.qml \ + src/res/qml/FixFloorPage.qml \ + src/res/qml/mainwidget.qml \ + src/res/qml/MyComboBox.qml \ + src/res/qml/MyDialogOkCancelPopup.qml \ + src/res/qml/MyDialogOkPopup.qml \ + src/res/qml/MyPushButton.qml \ + src/res/qml/MyPushButton2.qml \ + src/res/qml/MyResources.qml \ + src/res/qml/MySlider.qml \ + src/res/qml/MyStackViewPage.qml \ + src/res/qml/MyText.qml \ + src/res/qml/MyTextField.qml \ + src/res/qml/MyToggleButton.qml \ + src/res/qml/PlayspacePage.qml \ + src/res/qml/PttControllerConfigDialog.qml \ + src/res/qml/RevivePage.qml \ + src/res/qml/RootPage.qml \ + src/res/qml/SettingsPage.qml \ + src/res/qml/StatisticsPage.qml \ + src/res/qml/SteamVRPage.qml \ + src/res/qml/UtilitiesPage.qml diff --git a/src/res/qml/AudioPage.qml b/src/res/qml/AudioPage.qml index 62dc4f4..774ef91 100644 --- a/src/res/qml/AudioPage.qml +++ b/src/res/qml/AudioPage.qml @@ -38,9 +38,8 @@ MyStackViewPage { dialogTitle: "Delete Profile" dialogText: "Do you really want to delete this audio profile?" onClosed: { - //TODO audio delete profile if (okClicked) { - //AudioTabController.deletePttProfile(profileIndex) + AudioTabController.deleteAudioProfile(profileIndex) } } } @@ -121,8 +120,7 @@ MyStackViewPage { onClosed: { if (okClicked) { if (audioNewProfileName.text != "") { - //TODO call AUDIO add profile - //AudioTabController.addPttProfile(pttNewProfileName.text) + AudioTabController.addAudioProfile(audioNewProfileName.text) } else { audioMessageDialog.showMessage("Create New Profile", "ERROR: No name given.") } @@ -415,8 +413,7 @@ MyStackViewPage { text: "Apply" onClicked: { if (audioProfileComboBox.currentIndex > 0) { - //TODO - // AudioTabController.applyPttProfile(pttProfileComboBox.currentIndex - 1) + AudioTabController.applyAudioProfile(audioProfileComboBox.currentIndex - 1) audioProfileComboBox.currentIndex = 0 } } @@ -555,6 +552,7 @@ MyStackViewPage { audioMicNameCombo.currentIndex = AudioTabController.micDeviceIndex } reloadPttProfiles() + reloadAudioProfiles() audioPttEnabledToggle.checked = AudioTabController.pttEnabled audioPttLeftControllerToggle.checked = AudioTabController.pttLeftControllerEnabled audioPttRightControllerToggle.checked = AudioTabController.pttRightControllerEnabled @@ -634,6 +632,10 @@ MyStackViewPage { onPttProfilesUpdated: { reloadPttProfiles() } + onAudioProfilesUpdated:{ + reloadAudioProfiles() + } + onPlaybackDeviceListChanged: { var devs1 = [] var devs2 = [""] @@ -698,4 +700,14 @@ MyStackViewPage { pttProfileComboBox.currentIndex = 0 pttProfileComboBox.model = profiles } + + function reloadAudioProfiles(){ + var profiles = [""] + var profileCount = AudioTabController.getAudioProfileCount() + for (var i = 0; i < profileCount; i++) { + profiles.push(AudioTabController.getAudioProfileName(i)) + } + audioProfileComboBox.currentIndex = 0 + audioProfileComboBox.model = profiles + } } diff --git a/src/tabcontrollers/AudioProfileController.cpp b/src/tabcontrollers/AudioProfileController.cpp new file mode 100644 index 0000000..3fc9e7f --- /dev/null +++ b/src/tabcontrollers/AudioProfileController.cpp @@ -0,0 +1,107 @@ +#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 new file mode 100644 index 0000000..61a3741 --- /dev/null +++ b/src/tabcontrollers/AudioProfileController.h @@ -0,0 +1,67 @@ + +#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 fd82dc7..f48f393 100644 --- a/src/tabcontrollers/AudioTabController.cpp +++ b/src/tabcontrollers/AudioTabController.cpp @@ -38,6 +38,7 @@ namespace advsettings { m_micMuted = audioManager->getMicMuted(); reloadPttProfiles(); reloadPttConfig(); + reloadAudioProfiles(); reloadAudioSettings(); eventLoopTick(); } diff --git a/src/tabcontrollers/AudioTabController.h b/src/tabcontrollers/AudioTabController.h index ee916a6..8324606 100644 --- a/src/tabcontrollers/AudioTabController.h +++ b/src/tabcontrollers/AudioTabController.h @@ -3,6 +3,7 @@ #include "AudioManager.h" #include "PttController.h" +#include "AudioProfileController.h" #include class QQuickWindow; @@ -13,7 +14,7 @@ namespace advsettings { class OverlayController; - class AudioTabController : public PttController { + class AudioTabController : public AudioProfileController { Q_OBJECT Q_PROPERTY(int playbackDeviceIndex READ playbackDeviceIndex WRITE setPlaybackDeviceIndex NOTIFY playbackDeviceIndexChanged) Q_PROPERTY(int mirrorDeviceIndex READ mirrorDeviceIndex WRITE setMirrorDeviceIndex NOTIFY mirrorDeviceIndexChanged) @@ -55,6 +56,7 @@ namespace advsettings { std::string lastMirrorDevId; QString getSettingsName() override { return "audioSettings"; } + //QString getSettingsNameAudio() override { return "audioSettingsTest"; } void onPttStart() override; void onPttStop() override; void onPttEnabled() override; diff --git a/src/tabcontrollers/PttController.cpp b/src/tabcontrollers/PttController.cpp index 2fa0a30..89e891f 100644 --- a/src/tabcontrollers/PttController.cpp +++ b/src/tabcontrollers/PttController.cpp @@ -239,6 +239,7 @@ namespace advsettings { } void PttController::addPttProfile(QString name) { + int a = 0; PttProfile* profile = nullptr; for (auto& p : pttProfiles) { if (p.profileName.compare(name.toStdString()) == 0) {