diff --git a/advancedSettings.pro b/advancedSettings.pro index a9485ea..d17cf62 100644 --- a/advancedSettings.pro +++ b/advancedSettings.pro @@ -135,7 +135,7 @@ DISTFILES += \ src/res/qml/speaker_on.svg \ src/res/qml/qmldir \ src/res/qml/AccessibilityPage.qml \ - src/res/qml/AudioPage.qml \ + src/res/qml/audio_page/* \ src/res/qml/ChaperonePage.qml \ src/res/qml/ChaperoneWarningsPage.qml \ src/res/qml/FixFloorPage.qml \ @@ -163,4 +163,9 @@ DISTFILES += \ src/res/qml/LineSeparator.qml \ src/res/qml/utilities_page/keyboard_utils/* \ src/res/qml/utilities_page/desktop_size/* \ - src/res/qml/utilities_page/alarm_clock/* + src/res/qml/utilities_page/alarm_clock/* \ + src/res/qml/audio_page/dialog_boxes/* \ + src/res/qml/audio_page/device_selector/* \ + src/res/qml/audio_page/proximity/* \ + src/res/qml/audio_page/push_to_talk/* \ + src/res/qml/audio_page/profiles/* \ diff --git a/docs/screenshots/AudioPage.png b/docs/screenshots/AudioPage.png index 9b3bd13..eedc31c 100644 Binary files a/docs/screenshots/AudioPage.png and b/docs/screenshots/AudioPage.png differ diff --git a/src/res/qml/AudioPage.qml b/src/res/qml/AudioPage.qml deleted file mode 100644 index d8ea895..0000000 --- a/src/res/qml/AudioPage.qml +++ /dev/null @@ -1,741 +0,0 @@ -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 ptt profile?" - onClosed: { - if (okClicked) { - AudioTabController.deletePttProfile(profileIndex) - } - } - } - - MyDialogOkCancelPopup { - id: audioDeleteProfileDialog - property int profileIndex: -1 - dialogTitle: "Delete Profile" - dialogText: "Do you really want to delete this audio profile?" - onClosed: { - if (okClicked) { - AudioTabController.deleteAudioProfile(profileIndex) - pttProfileComboBox.currentIndex = 0 - } - } - } - - PttControllerConfigDialog { - id: pttControllerConfigDialog - pttControllerConfigClass: AudioTabController - } - - MyDialogOkCancelPopup { - id: pttNewProfileDialog - dialogTitle: "Create New PTT 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() - } - } - - - MyDialogOkCancelPopup { - id: audioNewProfileDialog - dialogTitle: "Create New Audio Profile" - dialogWidth: 600 - dialogHeight: 300 - dialogContentItem: ColumnLayout { - RowLayout { - Layout.topMargin: 16 - Layout.leftMargin: 16 - Layout.rightMargin: 16 - MyText { - text: "Name: " - } - MyTextField { - id: audioNewProfileName - keyBoardUID: 590 - color: "#cccccc" - text: "" - Layout.fillWidth: true - font.pointSize: 20 - function onInputEvent(input) { - audioNewProfileName.text = input - } - } - } - RowLayout { - Layout.topMargin: 16 - Layout.leftMargin: 16 - Layout.rightMargin: 16 - MyToggleButton { - id: audioDefaultProfileToggle - Layout.preferredWidth: 250 - text: "Make Default" - onCheckedChanged: { - AudioTabController.setAudioProfileDefault(checked, false) - } - } - } - } - onClosed: { - if (okClicked) { - if (audioNewProfileName.text != "") { - AudioTabController.addAudioProfile(audioNewProfileName.text) - } else { - audioMessageDialog.showMessage("Create New Profile", "ERROR: No name given.") - } - } - } - function openPopup() { - audioNewProfileName.text = "" - open() - } - } - - content: ColumnLayout { - spacing: 24 - - RowLayout { - MyText { - text: "Playback Device: " - Layout.preferredWidth: 260 - } - MyComboBox { - id: audioPlaybackNameCombo - Layout.maximumWidth: 850 - Layout.minimumWidth: 850 - Layout.preferredWidth: 850 - onActivated: { - if (componentCompleted) { - AudioTabController.setPlaybackDeviceIndex(currentIndex) - } - } - } - } - - ColumnLayout { - spacing: 18 - RowLayout { - MyText { - text: "Mirror Device: " - Layout.preferredWidth: 260 - } - MyComboBox { - id: audioMirrorNameCombo - Layout.maximumWidth: 850 - Layout.minimumWidth: 850 - Layout.preferredWidth: 850 - onActivated: { - if (componentCompleted) { - AudioTabController.setMirrorDeviceIndex(currentIndex - 1) - } - } - } - } - RowLayout { - MyText { - text: "Mirror Volume:" - Layout.preferredWidth: 260 - } - - 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: 260 - } - MyComboBox { - id: audioMicNameCombo - Layout.maximumWidth: 850 - Layout.minimumWidth: 850 - Layout.preferredWidth: 850 - onActivated: { - if (componentCompleted) { - AudioTabController.setMicDeviceIndex(currentIndex) - } - } - } - } - RowLayout { - MyText { - text: "Microphone Volume:" - Layout.preferredWidth: 260 - } - - 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) - } - } - } - MyToggleButton { - id: audioMuteProximitySensorToggle - Layout.preferredWidth: 600 - text: "Proximity Sensor Mutes/Unmutes Microphone" - onClicked: { - AudioTabController.setMicProximitySensorCanMute(checked, false) - } - } - 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) - } - } - } - RowLayout { - - MyToggleButton { - id: audioPttShowNotificationToggle - Layout.leftMargin: 350 - text: "Show notification in HMD" - onCheckedChanged: { - AudioTabController.setPttShowNotification(checked, false) - } - } - MyToggleButton { - id: audioPttReverseToggle - Layout.leftMargin: 118 - text: "Push-to-Mute" - onClicked: { - AudioTabController.setMicReversePtt(checked, false) - } - } - } - RowLayout { - spacing: 10 - - MyText { - Layout.preferredWidth: 150 - text: "Audio Profile:" - - } - - MyComboBox { - id: audioProfileComboBox - Layout.preferredWidth: 250 - model: [""] - onCurrentIndexChanged: { - if (currentIndex > 0) { - audioApplyProfileButton.enabled = true - audioDeleteProfileButton.enabled = true - } else { - audioApplyProfileButton.enabled = false - audioDeleteProfileButton.enabled = false - } - } - } - - MyPushButton { - id: audioApplyProfileButton - enabled: true - Layout.preferredWidth: 150 - text: "Apply" - onClicked: { - if (audioProfileComboBox.currentIndex > 0) { - AudioTabController.applyAudioProfile(audioProfileComboBox.currentIndex - 1) - } - } - } - - MyText { - text: "PTT Profile:" - Layout.preferredWidth: 150 - } - - MyComboBox { - id: pttProfileComboBox - Layout.preferredWidth: 250 - 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: 150 - text: "Apply" - onClicked: { - if (pttProfileComboBox.currentIndex > 0) { - AudioTabController.applyPttProfile(pttProfileComboBox.currentIndex - 1) - } - } - } - } - RowLayout { - spacing: 18 - - MyPushButton { - id: audioDeleteProfileButton - enabled: true - Layout.preferredWidth: 200 - text: "Delete Profile" - onClicked: { - if (audioProfileComboBox.currentIndex > 0) { - audioDeleteProfileDialog.profileIndex = audioProfileComboBox.currentIndex - 1 - audioDeleteProfileDialog.open() - } - } - } - MyPushButton { - Layout.preferredWidth: 200 - text: "New Profile" - onClicked: { - audioNewProfileDialog.openPopup() - } - } - 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 = [""] - 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 - audioMuteProximitySensorToggle.enabled = false - } else { - audioMicVolumeMinusButton.enabled = true - audioMicVolumeSlider.enabled = true - audioMicVolumePlusButton.enabled = true - audioMicMuteToggle.enabled = true - audioMuteProximitySensorToggle.enabled = true - audioMicVolumeSlider.value = AudioTabController.micVolume - audioMicMuteToggle.checked = AudioTabController.micMuted - audioMuteProximitySensorToggle.checked = AudioTabController.micProximitySensorCanMute - audioMicNameCombo.currentIndex = AudioTabController.micDeviceIndex - } - reloadPttProfiles() - reloadAudioProfiles() - audioPttEnabledToggle.checked = AudioTabController.pttEnabled - audioPttLeftControllerToggle.checked = AudioTabController.pttLeftControllerEnabled - audioPttRightControllerToggle.checked = AudioTabController.pttRightControllerEnabled - audioPttShowNotificationToggle.checked = AudioTabController.pttShowNotification - audioPttReverseToggle.checked = AudioTabController.micReversePtt - audioDefaultProfileToggle.checked = AudioTabController.audioProfileDefault - 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 - } - onMicProximitySensorCanMuteChanged: { - audioMuteProximitySensorToggle.checked = AudioTabController.micProximitySensorCanMute - } - onMicReversePttChanged: { - audioPttReverseToggle.checked = AudioTabController.micReversePtt - } - onPttEnabledChanged: { - audioPttEnabledToggle.checked = AudioTabController.pttEnabled - } - onPttActiveChanged: { - - } - onPttShowNotificationChanged: { - audioPttShowNotificationToggle.checked = AudioTabController.pttShowNotification - } - onPttLeftControllerEnabledChanged: { - audioPttLeftControllerToggle.checked = AudioTabController.pttLeftControllerEnabled - } - onPttRightControllerEnabledChanged: { - audioPttRightControllerToggle.checked = AudioTabController.pttRightControllerEnabled - } - onAudioProfileDefaultChanged: { - audioDefaultProfileToggle.checked = AudioTabController.audioProfileDefault - } - onPttProfilesUpdated: { - reloadPttProfiles() - } - onAudioProfilesUpdated: { - reloadAudioProfiles() - } - onAudioProfileAdded:{ - audioProfileComboBox.currentIndex = AudioTabController.getAudioProfileCount() - } - onPttProfileAdded:{ - pttProfileComboBox.currentIndex = AudioTabController.getPttProfileCount() - } - onDefaultProfileDisplay:{ - audioProfileComboBox.currentIndex = AudioTabController.getDefaultAudioProfileIndex() + 1 - } - - - onPlaybackDeviceListChanged: { - var devs1 = [] - var devs2 = [""] - 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 - } - } - onRecordingDeviceListChanged: { - 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 - } - } - } - } - - 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 - } - - 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/res/qml/RootPage.qml b/src/res/qml/RootPage.qml index 1a02e6b..af391c7 100644 --- a/src/res/qml/RootPage.qml +++ b/src/res/qml/RootPage.qml @@ -4,6 +4,7 @@ import QtQuick.Layouts 1.3 import matzman666.advsettings 1.0 import "." // QTBUG-34418, singletons require explicit import to load qmldir file import "utilities_page" +import "audio_page" MyStackViewPage { id: rootPage @@ -342,7 +343,7 @@ MyStackViewPage { Layout.leftMargin: 12 checkable: true contentItem: Image { - source: parent.checked ? "mic_off.svg" : "mic_on.svg" + source: parent.checked ? "audio_page/mic_off.svg" : "audio_page/mic_on.svg" sourceSize.width: 32 sourceSize.height: 32 anchors.fill: parent diff --git a/src/res/qml/audio_page/AudioPage.qml b/src/res/qml/audio_page/AudioPage.qml new file mode 100644 index 0000000..dbec66b --- /dev/null +++ b/src/res/qml/audio_page/AudioPage.qml @@ -0,0 +1,36 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import ".." //common imports +import "device_selector" +import "proximity" +import "push_to_talk" +import "profiles" + +MyStackViewPage { + width: 1200 + headerText: "Audio Settings" + + content: ColumnLayout { + spacing: 24 + + AudioDeviceSelector { + } + + MirrorVolumeSlider { + } + + MicVolumeSlider { + } + ColumnLayout { + spacing: 18 + ProximityToggle { + } + PttButtons { + } + ProfileButtons { + } + } + } +} diff --git a/src/res/qml/audio_page/device_selector/AudioDeviceSelector.qml b/src/res/qml/audio_page/device_selector/AudioDeviceSelector.qml new file mode 100644 index 0000000..0313b16 --- /dev/null +++ b/src/res/qml/audio_page/device_selector/AudioDeviceSelector.qml @@ -0,0 +1,64 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." // common imports + +RowLayout { + id: audioPlaybackNameCombo + property string deviceText: "Audio Device: " + + property alias devices: selector.model + property alias deviceIndex: selector.currentIndex + MyText { + text: deviceText + Layout.preferredWidth: 260 + } + MyComboBox { + id: selector + Layout.maximumWidth: 850 + Layout.minimumWidth: 850 + Layout.preferredWidth: 850 + onActivated: { + if (deviceIndex >= 0) { + AudioTabController.setPlaybackDeviceIndex(deviceIndex, false) + } + setShownAudioDevice(index) + } + } + Component.onCompleted: { + audioPlaybackNameCombo.devices = getAudioDeviceList() + setShownAudioDevice(AudioTabController.playbackDeviceIndex) + } + + Connections { + target: AudioTabController + onPlaybackDeviceIndexChanged: { + setShownAudioDevice(index) + } + onPlaybackDeviceListChanged: { + audioPlaybackNameCombo.devices = getAudioDeviceList() + setShownAudioDevice(AudioTabController.playbackDeviceIndex) + } + } + function getAudioDeviceList() { + var devices = [] + var playbackDevicesCount = AudioTabController.getPlaybackDeviceCount() + for (var i = 0; i < playbackDevicesCount; i++) { + var deviceName = AudioTabController.getPlaybackDeviceName(i) + devices.push(deviceName) + } + // Setting the model zeroes out the + // index so we need to set devices first. + return devices + } + function setShownAudioDevice(index) { + // If incorrect device, show "None". + if (index < 0) { + deviceIndex = 0 + } + else { + deviceIndex = index + } + } +} diff --git a/src/res/qml/audio_page/device_selector/MicDeviceSelector.qml b/src/res/qml/audio_page/device_selector/MicDeviceSelector.qml new file mode 100644 index 0000000..8f0179a --- /dev/null +++ b/src/res/qml/audio_page/device_selector/MicDeviceSelector.qml @@ -0,0 +1,64 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports + +RowLayout { + id: audioMicNameCombo + property string deviceText: "Microphone: " + + // The entries in the dropdown box. + property alias devices: selector.model + // The current index of the chosen device. + // Add one for use in the dropdown box because of the "None" entry. + property alias deviceIndex: selector.currentIndex + MyText { + text: deviceText + Layout.preferredWidth: 260 + } + MyComboBox { + id: selector + Layout.maximumWidth: 850 + Layout.minimumWidth: 850 + Layout.preferredWidth: 850 + onActivated: { + if (deviceIndex >= 0) { + AudioTabController.setMicDeviceIndex(currentIndex) + } + } + } + function getAudioDeviceList() { + var devices = [] + var playbackDevicesCount = AudioTabController.getRecordingDeviceCount() + for (var i = 0; i < playbackDevicesCount; i++) { + var deviceName = AudioTabController.getRecordingDeviceName(i) + devices.push(deviceName) + } + // Setting the model zeroes out the + // index so we need to set devices first. + return devices + } + function setShownAudioDevice(index) { + if (index < 0) { + deviceIndex = 0 + } + else { + deviceIndex = index + } + } + Component.onCompleted: { + devices = getAudioDeviceList() + setShownAudioDevice(AudioTabController.micDeviceIndex) + } + Connections { + target: AudioTabController + onMicDeviceIndexChanged: { + setShownAudioDevice(index) + } + onRecordingDeviceListChanged: { + devices = getAudioDeviceList() + setShownAudioDevice(AudioTabController.micDeviceIndex) + } + } +} diff --git a/src/res/qml/audio_page/device_selector/MicVolumeSlider.qml b/src/res/qml/audio_page/device_selector/MicVolumeSlider.qml new file mode 100644 index 0000000..d78f8a1 --- /dev/null +++ b/src/res/qml/audio_page/device_selector/MicVolumeSlider.qml @@ -0,0 +1,130 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports + +ColumnLayout { + spacing: 18 + MicDeviceSelector { + id: audioMicNameCombo + } + RowLayout { + MyText { + text: "Microphone Volume:" + Layout.preferredWidth: 260 + } + + 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) + } + } + } + Component.onCompleted: { + if (AudioTabController.micDeviceIndex < 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 + } + } + Connections { + target: AudioTabController + onMicDeviceIndexChanged: { + if (index < 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 + } + } + onMicVolumeChanged: { + audioMicVolumeSlider.value = AudioTabController.micVolume + } + onMicMutedChanged: { + audioMicMuteToggle.checked = AudioTabController.micMuted + } + onPlaybackDeviceListChanged: { + + } + onRecordingDeviceListChanged: { + if (AudioTabController.micDeviceIndex < 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 + } + } + } +} diff --git a/src/res/qml/audio_page/device_selector/MirrorDeviceSelector.qml b/src/res/qml/audio_page/device_selector/MirrorDeviceSelector.qml new file mode 100644 index 0000000..51dd936 --- /dev/null +++ b/src/res/qml/audio_page/device_selector/MirrorDeviceSelector.qml @@ -0,0 +1,74 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports + +RowLayout { + id: audioMirrorNameCombo + // Text shown to the left. + property string deviceText: "Mirror Device: " + + // The entries in the dropdown box. + property alias devices: selector.model + // The current index of the chosen device. + // Add one for use in the dropdown box because of the "None" entry. + property alias deviceIndex: selector.currentIndex + MyText { + text: deviceText + Layout.preferredWidth: 260 + } + MyComboBox { + id: selector + Layout.maximumWidth: 850 + Layout.minimumWidth: 850 + Layout.preferredWidth: 850 + onActivated: { + if (deviceIndex >= 0) { + // The mirror device list contains a "None" entry, hence + // we need to subtract one to get the real index. + AudioTabController.setMirrorDeviceIndex(deviceIndex - 1) + } + } + } + Component.onCompleted: { + // Populate dropdown with devices + audioMirrorNameCombo.devices = getAudioDeviceList() + + var mirrorIndex = AudioTabController.mirrorDeviceIndex + setShownAudioDevice(mirrorIndex) + + } + Connections { + target: AudioTabController + onMirrorDeviceIndexChanged: { + setShownAudioDevice(index) + } + onPlaybackDeviceListChanged: { + audioPlaybackNameCombo.devices = getAudioDeviceList() + setShownAudioDevice(AudioTabController.playbackDeviceIndex) + } + } + function getAudioDeviceList() { + var devices = [""] + var playbackDevicesCount = AudioTabController.getPlaybackDeviceCount() + for (var i = 0; i < playbackDevicesCount; i++) { + var deviceName = AudioTabController.getPlaybackDeviceName(i) + devices.push(deviceName) + } + // Setting the model zeroes out the + // index so we need to set devices first. + return devices + } + function setShownAudioDevice(index) { + // If incorrect device, show "None". + if (index < 0) { + deviceIndex = 0 + } + else { + // The mirror device list contains a "None" entry + // hence we need to add one to show the correct entry. + deviceIndex = index + 1 + } + } +} diff --git a/src/res/qml/audio_page/device_selector/MirrorVolumeSlider.qml b/src/res/qml/audio_page/device_selector/MirrorVolumeSlider.qml new file mode 100644 index 0000000..8709f4b --- /dev/null +++ b/src/res/qml/audio_page/device_selector/MirrorVolumeSlider.qml @@ -0,0 +1,129 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports +import "." + +ColumnLayout { + spacing: 18 + MirrorDeviceSelector { + id: audioMirrorNameCombo + } + RowLayout { + MyText { + text: "Mirror Volume:" + Layout.preferredWidth: 260 + } + + 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) + } + } + } + Component.onCompleted: { + if (AudioTabController.mirrorDeviceIndex < 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 + } + } + Connections { + target: AudioTabController + onMirrorDeviceIndexChanged: { + if (index < 0) { + audioMirrorNameCombo.deviceIndex = 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.deviceIndex = index + 1 + } + } + onMirrorVolumeChanged: { + audioMirrorVolumeSlider.value = AudioTabController.mirrorVolume + } + onMirrorMutedChanged: { + audioMirrorMuteToggle.checked = AudioTabController.mirrorMuted + } + onPlaybackDeviceListChanged: { + if (AudioTabController.mirrorDeviceIndex < 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 + } + } + } +} diff --git a/src/res/qml/audio_page/dialog_boxes/AudioDeleteProfileDialog.qml b/src/res/qml/audio_page/dialog_boxes/AudioDeleteProfileDialog.qml new file mode 100644 index 0000000..32fc49c --- /dev/null +++ b/src/res/qml/audio_page/dialog_boxes/AudioDeleteProfileDialog.qml @@ -0,0 +1,18 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports + +MyDialogOkCancelPopup { + id: audioDeleteProfileDialog + property int profileIndex: -1 + dialogTitle: "Delete Profile" + dialogText: "Do you really want to delete this audio profile?" + onClosed: { + if (okClicked) { + AudioTabController.deleteAudioProfile(profileIndex) + pttProfileComboBox.currentIndex = 0 + } + } +} diff --git a/src/res/qml/audio_page/dialog_boxes/AudioMessageDialog.qml b/src/res/qml/audio_page/dialog_boxes/AudioMessageDialog.qml new file mode 100644 index 0000000..c9cc549 --- /dev/null +++ b/src/res/qml/audio_page/dialog_boxes/AudioMessageDialog.qml @@ -0,0 +1,14 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports + +MyDialogOkPopup { + id: audioMessageDialog + function showMessage(title, text) { + dialogTitle = title + dialogText = text + open() + } +} diff --git a/src/res/qml/audio_page/dialog_boxes/AudioNewProfileDialog.qml b/src/res/qml/audio_page/dialog_boxes/AudioNewProfileDialog.qml new file mode 100644 index 0000000..d899de1 --- /dev/null +++ b/src/res/qml/audio_page/dialog_boxes/AudioNewProfileDialog.qml @@ -0,0 +1,70 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports + +MyDialogOkCancelPopup { + id: audioNewProfileDialog + dialogTitle: "Create New Audio Profile" + dialogWidth: 600 + dialogHeight: 300 + dialogContentItem: ColumnLayout { + RowLayout { + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + MyText { + text: "Name: " + } + MyTextField { + id: audioNewProfileName + keyBoardUID: 590 + color: "#cccccc" + text: "" + Layout.fillWidth: true + font.pointSize: 20 + function onInputEvent(input) { + audioNewProfileName.text = input + } + } + } + RowLayout { + id: test + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + MyToggleButton { + id: audioDefaultProfileToggle + Layout.preferredWidth: 250 + text: "Make Default" + onCheckedChanged: { + AudioTabController.setAudioProfileDefault(checked, false) + } + } + Component.onCompleted: { + audioDefaultProfileToggle.checked = AudioTabController.audioProfileDefault + } + } + } + onClosed: { + if (okClicked) { + if (audioNewProfileName.text != "") { + AudioTabController.addAudioProfile(audioNewProfileName.text) + } else { + audioMessageDialog.showMessage("Create New Profile", "ERROR: No name given.") + } + } + } + Connections { + target: AudioTabController + onAudioProfileDefaultChanged: { + defaultProfileToggle = AudioTabController.audioProfileDefault + } + } + + function openPopup() { + audioNewProfileName.text = "" + open() + } +} diff --git a/src/res/qml/audio_page/dialog_boxes/PttDeleteProfileDialog.qml b/src/res/qml/audio_page/dialog_boxes/PttDeleteProfileDialog.qml new file mode 100644 index 0000000..9d53ea5 --- /dev/null +++ b/src/res/qml/audio_page/dialog_boxes/PttDeleteProfileDialog.qml @@ -0,0 +1,17 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports + +MyDialogOkCancelPopup { + id: pttDeleteProfileDialog + property int profileIndex: -1 + dialogTitle: "Delete Profile" + dialogText: "Do you really want to delete this ptt profile?" + onClosed: { + if (okClicked) { + AudioTabController.deletePttProfile(profileIndex) + } + } +} diff --git a/src/res/qml/audio_page/dialog_boxes/PttNewProfileDialog.qml b/src/res/qml/audio_page/dialog_boxes/PttNewProfileDialog.qml new file mode 100644 index 0000000..45ef8d3 --- /dev/null +++ b/src/res/qml/audio_page/dialog_boxes/PttNewProfileDialog.qml @@ -0,0 +1,47 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports + +MyDialogOkCancelPopup { + id: pttNewProfileDialog + dialogTitle: "Create New PTT 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() + } +} diff --git a/src/res/qml/mic_off.svg b/src/res/qml/audio_page/mic_off.svg similarity index 100% rename from src/res/qml/mic_off.svg rename to src/res/qml/audio_page/mic_off.svg diff --git a/src/res/qml/mic_on.svg b/src/res/qml/audio_page/mic_on.svg similarity index 100% rename from src/res/qml/mic_on.svg rename to src/res/qml/audio_page/mic_on.svg diff --git a/src/res/qml/audio_page/profiles/ProfileButtons.qml b/src/res/qml/audio_page/profiles/ProfileButtons.qml new file mode 100644 index 0000000..87c6cae --- /dev/null +++ b/src/res/qml/audio_page/profiles/ProfileButtons.qml @@ -0,0 +1,185 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports +import "../dialog_boxes" + +ColumnLayout { + AudioMessageDialog { + id: audioMessageDialog + } + + PttDeleteProfileDialog { + id: pttDeleteProfileDialog + } + + AudioDeleteProfileDialog { + id: audioDeleteProfileDialog + } + + PttNewProfileDialog { + id: pttNewProfileDialog + } + + AudioNewProfileDialog { + id: audioNewProfileDialog + } + + RowLayout { + spacing: 10 + + MyText { + Layout.preferredWidth: 150 + text: "Audio Profile:" + } + + MyComboBox { + id: audioProfileComboBox + Layout.preferredWidth: 250 + model: [""] + onCurrentIndexChanged: { + if (currentIndex > 0) { + audioApplyProfileButton.enabled = true + audioDeleteProfileButton.enabled = true + } else { + audioApplyProfileButton.enabled = false + audioDeleteProfileButton.enabled = false + } + } + } + + MyPushButton { + id: audioApplyProfileButton + enabled: true + Layout.preferredWidth: 150 + text: "Apply" + onClicked: { + if (audioProfileComboBox.currentIndex > 0) { + AudioTabController.applyAudioProfile( + audioProfileComboBox.currentIndex - 1) + } + } + } + + MyText { + text: "PTT Profile:" + Layout.preferredWidth: 150 + } + + MyComboBox { + id: pttProfileComboBox + Layout.preferredWidth: 250 + 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: 150 + text: "Apply" + onClicked: { + if (pttProfileComboBox.currentIndex > 0) { + AudioTabController.applyPttProfile( + pttProfileComboBox.currentIndex - 1) + } + } + } + } + RowLayout { + spacing: 18 + + MyPushButton { + id: audioDeleteProfileButton + enabled: true + Layout.preferredWidth: 200 + text: "Delete Profile" + onClicked: { + if (audioProfileComboBox.currentIndex > 0) { + audioDeleteProfileDialog.profileIndex = audioProfileComboBox.currentIndex - 1 + audioDeleteProfileDialog.open() + } + } + } + MyPushButton { + Layout.preferredWidth: 200 + text: "New Profile" + onClicked: { + audioNewProfileDialog.openPopup() + } + } + 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: { + reloadPttProfiles() + reloadAudioProfiles() + } + Connections { + target: AudioTabController + onPttProfilesUpdated: { + reloadPttProfiles() + } + onAudioProfilesUpdated: { + reloadAudioProfiles() + } + onAudioProfileAdded: { + audioProfileComboBox.currentIndex = AudioTabController.getAudioProfileCount() + } + onPttProfileAdded: { + pttProfileComboBox.currentIndex = AudioTabController.getPttProfileCount() + } + onDefaultProfileDisplay: { + audioProfileComboBox.currentIndex = AudioTabController.getDefaultAudioProfileIndex( + ) + 1 + } + } + 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 + } + + 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/res/qml/audio_page/proximity/ProximityToggle.qml b/src/res/qml/audio_page/proximity/ProximityToggle.qml new file mode 100644 index 0000000..1ce982f --- /dev/null +++ b/src/res/qml/audio_page/proximity/ProximityToggle.qml @@ -0,0 +1,28 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports + +MyToggleButton { + id: audioMuteProximitySensorToggle + Layout.preferredWidth: 600 + text: "Proximity Sensor Mutes/Unmutes Microphone" + onClicked: { + AudioTabController.setMicProximitySensorCanMute(checked, false) + } + Component.onCompleted: { + if (AudioTabController.micDeviceIndex < 0) { + audioMuteProximitySensorToggle.enabled = false + } else { + audioMuteProximitySensorToggle.enabled = true + audioMuteProximitySensorToggle.checked = AudioTabController.micProximitySensorCanMute + } + } + Connections { + target: AudioTabController + onMicProximitySensorCanMuteChanged: { + audioMuteProximitySensorToggle.checked = AudioTabController.micProximitySensorCanMute + } + } +} diff --git a/src/res/qml/audio_page/push_to_talk/PttButtons.qml b/src/res/qml/audio_page/push_to_talk/PttButtons.qml new file mode 100644 index 0000000..9378cde --- /dev/null +++ b/src/res/qml/audio_page/push_to_talk/PttButtons.qml @@ -0,0 +1,96 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import matzman666.advsettings 1.0 +import "../.." //common imports +ColumnLayout { + RowLayout { + PttControllerConfigDialog { + id: pttControllerConfigDialog + pttControllerConfigClass: AudioTabController + } + + 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) + } + } + } + RowLayout { + + MyToggleButton { + id: audioPttShowNotificationToggle + Layout.leftMargin: 350 + text: "Show notification in HMD" + onCheckedChanged: { + AudioTabController.setPttShowNotification(checked, false) + } + } + MyToggleButton { + id: audioPttReverseToggle + Layout.leftMargin: 118 + text: "Push-to-Mute" + onClicked: { + AudioTabController.setMicReversePtt(checked, false) + } + } + } + + Component.onCompleted: { + audioPttEnabledToggle.checked = AudioTabController.pttEnabled + audioPttLeftControllerToggle.checked = AudioTabController.pttLeftControllerEnabled + audioPttRightControllerToggle.checked = AudioTabController.pttRightControllerEnabled + audioPttShowNotificationToggle.checked = AudioTabController.pttShowNotification + audioPttReverseToggle.checked = AudioTabController.micReversePtt + } + Connections { + target: AudioTabController + onPttEnabledChanged: { + audioPttEnabledToggle.checked = AudioTabController.pttEnabled + } + onPttLeftControllerEnabledChanged: { + audioPttLeftControllerToggle.checked = AudioTabController.pttLeftControllerEnabled + } + onPttRightControllerEnabledChanged: { + audioPttRightControllerToggle.checked = AudioTabController.pttRightControllerEnabled + } + onMicReversePttChanged: { + audioPttReverseToggle.checked = AudioTabController.micReversePtt + } + onPttShowNotificationChanged: { + audioPttShowNotificationToggle.checked = AudioTabController.pttShowNotification + } + } +} diff --git a/src/res/qml/speaker_off.svg b/src/res/qml/audio_page/speaker_off.svg similarity index 100% rename from src/res/qml/speaker_off.svg rename to src/res/qml/audio_page/speaker_off.svg diff --git a/src/res/qml/speaker_on.svg b/src/res/qml/audio_page/speaker_on.svg similarity index 100% rename from src/res/qml/speaker_on.svg rename to src/res/qml/audio_page/speaker_on.svg diff --git a/src/res/qml/mainwidget.qml b/src/res/qml/mainwidget.qml index e5f8f54..91953b5 100644 --- a/src/res/qml/mainwidget.qml +++ b/src/res/qml/mainwidget.qml @@ -2,6 +2,7 @@ import QtQuick 2.7 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.0 import "utilities_page" +import "audio_page" Rectangle { id: root