Files
OpenVR-AdvancedSettings-frame/bin/win64/res/qml/AudioPage.qml
T

511 lines
18 KiB
QML

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import matzman666.advsettings 1.0
MyStackViewPage {
width: 1200
headerText: "Audio Settings"
property bool componentCompleted: false
MyDialogOkPopup {
id: audioMessageDialog
function showMessage(title, text) {
dialogTitle = title
dialogText = text
open()
}
}
MyDialogOkCancelPopup {
id: pttDeleteProfileDialog
property int profileIndex: -1
dialogTitle: "Delete Profile"
dialogText: "Do you really want to delete this profile?"
onClosed: {
if (okClicked) {
AudioTabController.deletePttProfile(profileIndex)
}
}
}
PttControllerConfigDialog {
id: pttControllerConfigDialog
pttControllerConfigClass: AudioTabController
}
MyDialogOkCancelPopup {
id: pttNewProfileDialog
dialogTitle: "Create New Profile"
dialogWidth: 600
dialogHeight: 220
dialogContentItem: ColumnLayout {
RowLayout {
Layout.topMargin: 16
Layout.leftMargin: 16
Layout.rightMargin: 16
MyText {
text: "Name: "
}
MyTextField {
id: pttNewProfileName
keyBoardUID: 590
color: "#cccccc"
text: ""
Layout.fillWidth: true
font.pointSize: 20
function onInputEvent(input) {
pttNewProfileName.text = input
}
}
}
}
onClosed: {
if (okClicked) {
if (pttNewProfileName.text != "") {
AudioTabController.addPttProfile(pttNewProfileName.text)
} else {
audioMessageDialog.showMessage("Create New Profile", "ERROR: No name given.")
}
}
}
function openPopup() {
pttNewProfileName.text = ""
open()
}
}
content: ColumnLayout {
spacing: 68
RowLayout {
MyText {
text: "Playback Device: "
Layout.preferredWidth: 210
}
MyComboBox {
id: audioPlaybackNameCombo
Layout.maximumWidth: 900
Layout.minimumWidth: 900
Layout.preferredWidth: 900
onCurrentIndexChanged: {
if (componentCompleted) {
AudioTabController.setPlaybackDeviceIndex(currentIndex)
}
}
}
}
ColumnLayout {
spacing: 18
RowLayout {
MyText {
text: "Mirror Device: "
Layout.preferredWidth: 210
}
MyComboBox {
id: audioMirrorNameCombo
Layout.maximumWidth: 900
Layout.minimumWidth: 900
Layout.preferredWidth: 900
onCurrentIndexChanged: {
if (componentCompleted) {
AudioTabController.setMirrorDeviceIndex(currentIndex - 1)
}
}
}
}
RowLayout {
MyText {
text: "Volume:"
Layout.preferredWidth: 120
}
MyPushButton2 {
id: audioMirrorVolumeMinusButton
text: "-"
Layout.preferredWidth: 40
onClicked: {
audioMirrorVolumeSlider.value -= 0.1
}
}
MySlider {
id: audioMirrorVolumeSlider
from: 0.0
to: 1.0
stepSize: 0.01
value: 1.0
Layout.fillWidth: true
onPositionChanged: {
var val = this.position * 100
audioMirrorVolumeText.text = Math.round(val) + "%"
}
onValueChanged: {
AudioTabController.setMirrorVolume(this.value.toFixed(2), false)
}
}
MyPushButton2 {
id: audioMirrorVolumePlusButton
text: "+"
Layout.preferredWidth: 40
onClicked: {
audioMirrorVolumeSlider.value += 0.1
}
}
MyText {
id: audioMirrorVolumeText
text: "100%"
Layout.preferredWidth: 85
horizontalAlignment: Text.AlignRight
}
MyPushButton2 {
id: audioMirrorMuteToggle
Layout.leftMargin: 12
checkable: true
contentItem: Image {
source: parent.checked ? "speaker_off.svg" : "speaker_on.svg"
sourceSize.width: 32
sourceSize.height: 32
anchors.fill: parent
}
onCheckedChanged: {
AudioTabController.setMirrorMuted(checked, false)
}
}
}
}
ColumnLayout {
spacing: 18
RowLayout {
MyText {
text: "Microphone: "
Layout.preferredWidth: 210
}
MyComboBox {
id: audioMicNameCombo
Layout.maximumWidth: 900
Layout.minimumWidth: 900
Layout.preferredWidth: 900
onCurrentIndexChanged: {
if (componentCompleted) {
AudioTabController.setMicDeviceIndex(currentIndex)
}
}
}
}
RowLayout {
MyText {
text: "Volume:"
Layout.preferredWidth: 120
}
MyPushButton2 {
id: audioMicVolumeMinusButton
text: "-"
Layout.preferredWidth: 40
onClicked: {
audioMicVolumeSlider.value -= 0.1
}
}
MySlider {
id: audioMicVolumeSlider
from: 0.0
to: 1.0
stepSize: 0.01
value: 1.0
Layout.fillWidth: true
onPositionChanged: {
var val = this.position * 100
audioMicVolumeText.text = Math.round(val) + "%"
}
onValueChanged: {
AudioTabController.setMicVolume(this.value.toFixed(2))
}
}
MyPushButton2 {
id: audioMicVolumePlusButton
text: "+"
Layout.preferredWidth: 40
onClicked: {
audioMicVolumeSlider.value += 0.1
}
}
MyText {
id: audioMicVolumeText
text: "100%"
Layout.preferredWidth: 85
horizontalAlignment: Text.AlignRight
}
MyPushButton2 {
id: audioMicMuteToggle
Layout.leftMargin: 12
checkable: true
contentItem: Image {
source: parent.checked ? "mic_off.svg" : "mic_on.svg"
sourceSize.width: 32
sourceSize.height: 32
anchors.fill: parent
}
onCheckedChanged: {
AudioTabController.setMicMuted(checked)
}
}
}
RowLayout {
MyToggleButton {
id: audioPttEnabledToggle
Layout.preferredWidth: 260
text: "Push-to-Talk:"
onClicked: {
AudioTabController.pttEnabled = checked
}
}
MyToggleButton {
id: audioPttLeftControllerToggle
text: "Left Controller"
onClicked: {
AudioTabController.setPttLeftControllerEnabled(checked, false)
}
}
MyPushButton {
text: "Configure"
onClicked: {
pttControllerConfigDialog.openPopup(0)
}
}
Item {
Layout.fillWidth: true
}
MyToggleButton {
id: audioPttRightControllerToggle
text: "Right Controller"
onClicked: {
AudioTabController.setPttRightControllerEnabled(checked, false)
}
}
MyPushButton {
text: "Configure"
onClicked: {
pttControllerConfigDialog.openPopup(1)
}
}
}
MyToggleButton {
id: audioPttShowNotificationToggle
Layout.leftMargin: 265
text: "Show notification in HMD."
onCheckedChanged: {
AudioTabController.setPttShowNotification(checked, false)
}
}
RowLayout {
spacing: 18
MyText {
Layout.leftMargin: 270
text: "Profile:"
}
MyComboBox {
id: pttProfileComboBox
Layout.fillWidth: true
model: [""]
onCurrentIndexChanged: {
if (currentIndex > 0) {
pttApplyProfileButton.enabled = true
pttDeleteProfileButton.enabled = true
} else {
pttApplyProfileButton.enabled = false
pttDeleteProfileButton.enabled = false
}
}
}
MyPushButton {
id: pttApplyProfileButton
enabled: true
Layout.preferredWidth: 200
text: "Apply"
onClicked: {
if (pttProfileComboBox.currentIndex > 0) {
AudioTabController.applyPttProfile(pttProfileComboBox.currentIndex - 1)
pttProfileComboBox.currentIndex = 0
}
}
}
}
RowLayout {
spacing: 18
Item {
Layout.fillWidth: true
}
MyPushButton {
id: pttDeleteProfileButton
enabled: true
Layout.preferredWidth: 200
text: "Delete Profile"
onClicked: {
if (pttProfileComboBox.currentIndex > 0) {
pttDeleteProfileDialog.profileIndex = pttProfileComboBox.currentIndex - 1
pttDeleteProfileDialog.open()
}
}
}
MyPushButton {
Layout.preferredWidth: 200
text: "New Profile"
onClicked: {
pttNewProfileDialog.openPopup()
}
}
}
}
Component.onCompleted: {
var devs1 = []
var devs2 = ["<None>"]
var playbackDeviceCount = AudioTabController.getPlaybackDeviceCount()
for (var i = 0; i < playbackDeviceCount; i++) {
var name = AudioTabController.getPlaybackDeviceName(i)
devs1.push(name)
devs2.push(name)
}
audioPlaybackNameCombo.model = devs1
audioPlaybackNameCombo.currentIndex = AudioTabController.playbackDeviceIndex
audioMirrorNameCombo.model = devs2
if (AudioTabController.mirrorDeviceIndex < 0) {
audioMirrorNameCombo.currentIndex = 0
audioMirrorVolumeMinusButton.enabled = false
audioMirrorVolumeSlider.enabled = false
audioMirrorVolumePlusButton.enabled = false
audioMirrorMuteToggle.enabled = false
} else {
audioMirrorVolumeMinusButton.enabled = true
audioMirrorVolumeSlider.enabled = true
audioMirrorVolumePlusButton.enabled = true
audioMirrorMuteToggle.enabled = true
audioMirrorVolumeSlider.value = AudioTabController.mirrorVolume
audioMirrorMuteToggle.checked = AudioTabController.mirrorMuted
audioMirrorNameCombo.currentIndex = AudioTabController.mirrorDeviceIndex + 1
}
var devs3 = []
var micDeviceCount = AudioTabController.getRecordingDeviceCount()
for (var i = 0; i < micDeviceCount; i++) {
var name = AudioTabController.getRecordingDeviceName(i)
devs3.push(name)
}
audioMicNameCombo.model = devs3
if (AudioTabController.micDeviceIndex < 0) {
audioMicNameCombo.currentIndex = 0
audioMicVolumeMinusButton.enabled = false
audioMicVolumeSlider.enabled = false
audioMicVolumePlusButton.enabled = false
audioMicMuteToggle.enabled = false
} else {
audioMicVolumeMinusButton.enabled = true
audioMicVolumeSlider.enabled = true
audioMicVolumePlusButton.enabled = true
audioMicMuteToggle.enabled = true
audioMicVolumeSlider.value = AudioTabController.micVolume
audioMicMuteToggle.checked = AudioTabController.micMuted
audioMicNameCombo.currentIndex = AudioTabController.micDeviceIndex
}
reloadPttProfiles()
audioPttEnabledToggle.checked = AudioTabController.pttEnabled
audioPttLeftControllerToggle.checked = AudioTabController.pttLeftControllerEnabled
audioPttRightControllerToggle.checked = AudioTabController.pttRightControllerEnabled
audioPttShowNotificationToggle.checked = AudioTabController.pttShowNotification
componentCompleted = true
}
Connections {
target: AudioTabController
onPlaybackDeviceIndexChanged: {
audioPlaybackNameCombo.currentIndex = index
}
onMirrorDeviceIndexChanged: {
if (index < 0) {
audioMirrorNameCombo.currentIndex = 0
audioMirrorVolumeMinusButton.enabled = false
audioMirrorVolumeSlider.enabled = false
audioMirrorVolumePlusButton.enabled = false
audioMirrorMuteToggle.enabled = false
} else {
audioMirrorVolumeMinusButton.enabled = true
audioMirrorVolumeSlider.enabled = true
audioMirrorVolumePlusButton.enabled = true
audioMirrorMuteToggle.enabled = true
audioMirrorNameCombo.currentIndex = index + 1
}
}
onMirrorVolumeChanged: {
audioMirrorVolumeSlider.value = AudioTabController.mirrorVolume
}
onMirrorMutedChanged: {
audioMirrorMuteToggle.checked = AudioTabController.mirrorMuted
}
onMicDeviceIndexChanged: {
if (index < 0) {
audioMicNameCombo.currentIndex = 0
audioMicVolumeMinusButton.enabled = false
audioMicVolumeSlider.enabled = false
audioMicVolumePlusButton.enabled = false
audioMicMuteToggle.enabled = false
} else {
audioMicVolumeMinusButton.enabled = true
audioMicVolumeSlider.enabled = true
audioMicVolumePlusButton.enabled = true
audioMicMuteToggle.enabled = true
audioMicNameCombo.currentIndex = index
}
}
onMicVolumeChanged: {
audioMicVolumeSlider.value = AudioTabController.micVolume
}
onMicMutedChanged: {
audioMicMuteToggle.checked = AudioTabController.micMuted
}
onPttEnabledChanged: {
audioPttEnabledToggle.checked = AudioTabController.pttEnabled
}
onPttActiveChanged: {
}
onPttShowNotificationChanged: {
audioPttShowNotificationToggle.checked = AudioTabController.pttShowNotification
}
onPttLeftControllerEnabledChanged: {
audioPttLeftControllerToggle.checked = AudioTabController.pttLeftControllerEnabled
}
onPttRightControllerEnabledChanged: {
audioPttRightControllerToggle.checked = AudioTabController.pttRightControllerEnabled
}
onPttProfilesUpdated: {
reloadPttProfiles()
}
}
}
function reloadPttProfiles() {
var profiles = [""]
var profileCount = AudioTabController.getPttProfileCount()
for (var i = 0; i < profileCount; i++) {
profiles.push(AudioTabController.getPttProfileName(i))
}
pttProfileComboBox.currentIndex = 0
pttProfileComboBox.model = profiles
}
}