diff --git a/GlosSIConfig/GlosSIConfig.vcxproj b/GlosSIConfig/GlosSIConfig.vcxproj index 0f078ca..8c2b354 100644 --- a/GlosSIConfig/GlosSIConfig.vcxproj +++ b/GlosSIConfig/GlosSIConfig.vcxproj @@ -57,9 +57,11 @@ ResourceCompile + $(LibraryPath) ResourceCompile + $(LibraryPath) @@ -81,6 +83,7 @@ true + %(AdditionalDependencies) @@ -99,6 +102,7 @@ AsInvoker true + %(AdditionalDependencies) powershell.exe $(SolutionDir)version_help.ps1 @@ -137,6 +141,7 @@ + diff --git a/GlosSIConfig/GlosSIConfig.vcxproj.filters b/GlosSIConfig/GlosSIConfig.vcxproj.filters index 9864bc5..fca686f 100644 --- a/GlosSIConfig/GlosSIConfig.vcxproj.filters +++ b/GlosSIConfig/GlosSIConfig.vcxproj.filters @@ -74,6 +74,9 @@ qml + + qml + diff --git a/GlosSIConfig/qml.qrc b/GlosSIConfig/qml.qrc index fed0a77..4c331a8 100644 --- a/GlosSIConfig/qml.qrc +++ b/GlosSIConfig/qml.qrc @@ -19,5 +19,6 @@ qml/CollapsiblePane.qml svg/expand_more_white_24dp.svg GlosSI_Logo_512.png + qml/AdvancedTargetSettings.qml diff --git a/GlosSIConfig/qml/AdvancedTargetSettings.qml b/GlosSIConfig/qml/AdvancedTargetSettings.qml new file mode 100644 index 0000000..d2c9e91 --- /dev/null +++ b/GlosSIConfig/qml/AdvancedTargetSettings.qml @@ -0,0 +1,462 @@ +/* +Copyright 2021-2022 Peter Repukat - FlatspotSoftware + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +import QtQuick 6.2 +import QtQuick.Controls 6.2 +import QtQuick.Layouts 6.2 +import QtQuick.Controls.Material 6.2 +import QtQuick.Dialogs 6.2 + +CollapsiblePane { + radius: 4 + Material.elevation: 32 + bgOpacity: 0.97 + title: qsTr("Advanced ⚙️") + + property var shortcutInfo: ({}) + + content: + Column { + spacing: 16 + + RPane { + width: parent.width + radius: 4 + Material.elevation: 32 + bgOpacity: 0.97 + height: advancedLaunchCol.height + 24 + Column { + id: advancedLaunchCol + spacing: 4 + height: advancedLaunchedRow.height + Row { + id: advancedLaunchedRow + spacing: 32 + width: parent.width + height: closeOnExitCol.height + Column { + id: closeOnExitCol + spacing: 2 + CheckBox { + id: closeOnExit + text: qsTr("Close when launched app quits") + checked: shortcutInfo.launch.closeOnExit + onCheckedChanged: function() { + shortcutInfo.launch.closeOnExit = checked + if (checked) { + waitForChildren.enabled = true; + } else { + waitForChildren.enabled = false; + } + } + } + Label { + text: qsTr("Recommended to disable for launcher-games") + wrapMode: Text.WordWrap + width: parent.width + leftPadding: 32 + topPadding: -8 + } + CheckBox { + id: waitForChildren + text: qsTr("Wait for child processes") + checked: shortcutInfo.launch.waitForChildProcs + onCheckedChanged: function(){ + shortcutInfo.launch.waitForChildProcs = checked + } + } + } + Column { + spacing: 2 + CheckBox { + id: allowDesktopConfig + text: qsTr("Allow desktop-config") + checked: shortcutInfo.controller.allowDesktopConfig + onCheckedChanged: function(){ + shortcutInfo.controller.allowDesktopConfig = checked + } + } + Label { + text: qsTr("Allow desktop-config if launched application is not focused") + leftPadding: 32 + topPadding: -8 + } + } + } + } + } + + Row { + spacing: 16 + width: parent.width + + RPane { + width: parent.width / 2 - 8 + height: 248 + radius: 4 + Material.elevation: 32 + bgOpacity: 0.97 + + Column { + spacing: 0 + width: parent.width + Row { + CheckBox { + id: hideDevices + text: qsTr("Hide (Real) Controllers") + checked: shortcutInfo.devices.hideDevices + onCheckedChanged: shortcutInfo.devices.hideDevices = checked + } + RoundButton { + onClicked: () => { + helpInfoDialog.titleText = qsTr("Hide (Real) Controllers") + helpInfoDialog.text = + qsTr("Hides real game controllers from the system\nThis may prevent doubled inputs") + + "\n" + + qsTr("You can change this setting and which devices are hidden in the GlosSI overlay") + + helpInfoDialog.open() + } + width: 48 + height: 48 + Material.elevation: 0 + anchors.topMargin: 16 + Image { + anchors.centerIn: parent + source: "qrc:/svg/help_outline_white_24dp.svg" + width: 24 + height: 24 + } + } + } + Item { + width: 1 + height: 4 + } + Row { + CheckBox { + id: realDeviceIds + text: qsTr("Use real device (USB)-IDs") + checked: shortcutInfo.devices.realDeviceIds + onCheckedChanged: shortcutInfo.devices.realDeviceIds = checked + } + RoundButton { + onClicked: () => { + helpInfoDialog.titleText = qsTr("Use real device (USB)-IDs") + helpInfoDialog.text = + qsTr("Only enable if input's are not recognized by the game") + + "\n" + + qsTr("If enabled, device-hiding won't work.\nUse the \"Max. Controller count\" setting!") + + helpInfoDialog.open() + } + width: 48 + height: 48 + Material.elevation: 0 + anchors.topMargin: 16 + Image { + anchors.centerIn: parent + source: "qrc:/svg/help_outline_white_24dp.svg" + width: 24 + height: 24 + } + } + } + Item { + width: 1 + height: 4 + } + Row { + CheckBox { + id: emulateDS4 + text: qsTr("Emulate DS4") + checked: shortcutInfo.controller.emulateDS4 || false + onCheckedChanged: shortcutInfo.controller.emulateDS4 = checked + } + RoundButton { + onClicked: () => { + helpInfoDialog.titleText = qsTr("Emulate DS4") + helpInfoDialog.text = + qsTr("Emulates a DS4 instead of X360 Pad") + + "\n" + qsTr("for usage with, for example, PSNow") + + "\n" + + qsTr("If enabled you have to disable \"Playstation Configuration support\" in Steam") + helpInfoDialog.open() + } + width: 48 + height: 48 + Material.elevation: 0 + anchors.topMargin: 16 + Image { + anchors.centerIn: parent + source: "qrc:/svg/help_outline_white_24dp.svg" + width: 24 + height: 24 + } + } + } + Item { + width: 1 + height: 4 + } + Row { + leftPadding: 16 + Label { + text: qsTr("Max. emulated controllers") + topPadding: 16 + } + SpinBox { + id: maxControllersSpinBox + width: 128 + editable: true + value: shortcutInfo.controller.maxControllers + from: 0 + to: 4 + onValueChanged: shortcutInfo.controller.maxControllers = value + } + RoundButton { + onClicked: () => { + helpInfoDialog.titleText = qsTr("Max. emulated controllers") + helpInfoDialog.text = + qsTr("GlosSI will only provide [NUMBER] of controllers") + + "\n" + + qsTr("Required to set to actually connected controller count when using \"real device IDs\" ") + helpInfoDialog.open() + } + width: 48 + height: 48 + Material.elevation: 0 + anchors.topMargin: 16 + Image { + anchors.centerIn: parent + source: "qrc:/svg/help_outline_white_24dp.svg" + width: 24 + height: 24 + } + } + } + } + } + RPane { + width: parent.width / 2 - 8 + height: 248 + radius: 4 + Material.elevation: 32 + bgOpacity: 0.97 + Column { + spacing: 0 + width: parent.width + Row { + CheckBox { + id: windowMode + text: qsTr("Steam/GlosSI overlay as separate window") + checked: shortcutInfo.window.windowMode + onCheckedChanged: shortcutInfo.window.windowMode = checked + } + RoundButton { + onClicked: () => { + helpInfoDialog.titleText = qsTr("Steam/GlosSI overlay as separate window") + helpInfoDialog.text = + qsTr("Doesn't show overlay on top, but as separate window") + + "\n" + + qsTr("Use if blackscreen-issues are encountered.") + + helpInfoDialog.open() + } + width: 48 + height: 48 + Material.elevation: 0 + anchors.topMargin: 16 + Image { + anchors.centerIn: parent + source: "qrc:/svg/help_outline_white_24dp.svg" + width: 24 + height: 24 + } + } + } + Item { + width: 1 + height: 4 + } + + Row { + CheckBox { + id: disableOverlayCheckbox + text: qsTr("Disable Steam/GlosSI overlay") + checked: shortcutInfo.window.disableOverlay + onCheckedChanged: shortcutInfo.window.disableOverlay = checked + } + RoundButton { + onClicked: () => { + helpInfoDialog.titleText = qsTr("Disable Steam/GlosSI overlay") + helpInfoDialog.text = + qsTr("Only controller emulation - No extra window") + + "\n" + + qsTr("Might help with Steam remote play.") + + helpInfoDialog.open() + } + width: 48 + height: 48 + Material.elevation: 0 + anchors.topMargin: 16 + Image { + anchors.centerIn: parent + source: "qrc:/svg/help_outline_white_24dp.svg" + width: 24 + height: 24 + } + } + } + Item { + width: 1 + height: 4 + } + Row { + leftPadding: 16 + Label { + text: qsTr("GlosSI-Overlay scale") + topPadding: 16 + } + SpinBox { + id: scaleSpinBox + width: 172 + from: -100 + value: shortcutInfo.window.scale * 100 || 0 + to: 350 + stepSize: 10 + editable: true + + property int decimals: 2 + property real realValue: value / 100 + + validator: DoubleValidator { + bottom: Math.min(scaleSpinBox.from, scaleSpinBox.to) + top: Math.max(scaleSpinBox.from, scaleSpinBox.to) + } + + textFromValue: function(value, locale) { + return Number(value / 100).toLocaleString(locale, 'f', scaleSpinBox.decimals) + } + + valueFromText: function(text, locale) { + return Number.fromLocaleString(locale, text) * 100 + } + onValueChanged: function() { + if (value <= 0) { + shortcutInfo.window.scale = null + return + } + shortcutInfo.window.scale = value / 100 + } + } + RoundButton { + onClicked: () => { + helpInfoDialog.titleText = qsTr("GloSI-Overlay scaling") + helpInfoDialog.text = + qsTr("Scales the elements of the GlosSI-Overlay (not Steam Overlay)") + + "\n" + + qsTr(" <= 0.0 to use auto-detection") + + helpInfoDialog.open() + } + width: 48 + height: 48 + Material.elevation: 0 + anchors.topMargin: 16 + Image { + anchors.centerIn: parent + source: "qrc:/svg/help_outline_white_24dp.svg" + width: 24 + height: 24 + } + } + } + Item { + width: 1 + height: 4 + } + Row { + leftPadding: 16 + Label { + text: qsTr("Max. Overlay FPS") + topPadding: 16 + } + SpinBox { + id: maxFPSSpinBox + width: 172 + from: -1 + value: shortcutInfo.window.maxFps || 0 + to: 244 + stepSize: 5 + editable: true + + onValueChanged: function() { + if (value <= 0) { + shortcutInfo.window.maxFps = null + return + } + shortcutInfo.window.maxFps = value + } + } + RoundButton { + onClicked: () => { + helpInfoDialog.titleText = qsTr("Max. Overlay FPS") + helpInfoDialog.text = + qsTr("Restricts the FPS of the overlay to the given value") + + "\n" + + qsTr(" <= 0.0 to use screen refresh rate") + + helpInfoDialog.open() + } + width: 48 + height: 48 + Material.elevation: 0 + anchors.topMargin: 16 + Image { + anchors.centerIn: parent + source: "qrc:/svg/help_outline_white_24dp.svg" + width: 24 + height: 24 + } + } + } + } + } + } + + RPane { + width: parent.width + radius: 4 + Material.elevation: 32 + bgOpacity: 0.97 + Column { + spacing: 4 + Row { + Row { + CheckBox { + id: extendedLogging + text: qsTr("Extended Logging") + checked: shortcutInfo.extendedLogging + onCheckedChanged: shortcutInfo.extendedLogging = checked + } + } + } + } + } + } +} \ No newline at end of file diff --git a/GlosSIConfig/qml/ShortcutProps.qml b/GlosSIConfig/qml/ShortcutProps.qml index a4d3820..7774558 100644 --- a/GlosSIConfig/qml/ShortcutProps.qml +++ b/GlosSIConfig/qml/ShortcutProps.qml @@ -76,19 +76,8 @@ Item { pathInput.text = shortcutInfo.launch.launchPath || "" argsInput.text = shortcutInfo.launch.launchAppArgs || "" } - if (extendedLogging) { // advanced settings (collapsible container) - extendedLogging.checked = shortcutInfo.extendedLogging || false - closeOnExit.checked = shortcutInfo.launch.closeOnExit - waitForChildren.checked = shortcutInfo.launch.waitForChildProcs - hideDevices.checked = shortcutInfo.devices.hideDevices - realDeviceIds.checked = shortcutInfo.devices.realDeviceIds - windowMode.checked = shortcutInfo.window.windowMode - disableOverlayCheckbox.checked = shortcutInfo.window.disableOverlay - scaleSpinBox.value = shortcutInfo.window.scale - maxFPSSpinBox.value = shortcutInfo.window.maxFps - maxControllersSpinBox.value = shortcutInfo.controller.maxControllers - allowDesktopConfig.checked = shortcutInfo.controller.allowDesktopConfig - emulateDS4.checked = shortcutInfo.controller.emulateDS4 + if (advancedTargetSettings) { // advanced settings (collapsible container) + advancedTargetSettings.shortcutInfo = shortcutInfo; } } @@ -276,464 +265,8 @@ Item { height: 8 } - CollapsiblePane { - radius: 4 - Material.elevation: 32 - bgOpacity: 0.97 - title: qsTr("Advanced ⚙️") - content: - Column { - spacing: 16 - - RPane { - width: parent.width - radius: 4 - Material.elevation: 32 - bgOpacity: 0.97 - height: advancedLaunchCol.height + 24 - Column { - id: advancedLaunchCol - spacing: 4 - height: advancedLaunchedRow.height - Row { - id: advancedLaunchedRow - spacing: 32 - width: parent.width - height: closeOnExitCol.height - Column { - id: closeOnExitCol - spacing: 2 - CheckBox { - id: closeOnExit - text: qsTr("Close when launched app quits") - checked: shortcutInfo.launch.closeOnExit - onCheckedChanged: function() { - shortcutInfo.launch.closeOnExit = checked - if (checked) { - waitForChildren.enabled = true; - } else { - waitForChildren.enabled = false; - } - } - } - Label { - text: qsTr("Recommended to disable for launcher-games") - wrapMode: Text.WordWrap - width: parent.width - leftPadding: 32 - topPadding: -8 - } - CheckBox { - id: waitForChildren - text: qsTr("Wait for child processes") - checked: shortcutInfo.launch.waitForChildProcs - onCheckedChanged: function(){ - shortcutInfo.launch.waitForChildProcs = checked - } - } - } - Column { - spacing: 2 - CheckBox { - id: allowDesktopConfig - text: qsTr("Allow desktop-config") - checked: shortcutInfo.controller.allowDesktopConfig - onCheckedChanged: function(){ - shortcutInfo.controller.allowDesktopConfig = checked - } - } - Label { - text: qsTr("Allow desktop-config if launched application is not focused") - leftPadding: 32 - topPadding: -8 - } - } - } - } - } - - Row { - spacing: 16 - width: parent.width - - RPane { - width: parent.width / 2 - 8 - height: 248 - radius: 4 - Material.elevation: 32 - bgOpacity: 0.97 - - Column { - spacing: 0 - width: parent.width - Row { - CheckBox { - id: hideDevices - text: qsTr("Hide (Real) Controllers") - checked: shortcutInfo.devices.hideDevices - onCheckedChanged: shortcutInfo.devices.hideDevices = checked - } - RoundButton { - onClicked: () => { - helpInfoDialog.titleText = qsTr("Hide (Real) Controllers") - helpInfoDialog.text = - qsTr("Hides real game controllers from the system\nThis may prevent doubled inputs") - + "\n" - + qsTr("You can change this setting and which devices are hidden in the GlosSI overlay") - - helpInfoDialog.open() - } - width: 48 - height: 48 - Material.elevation: 0 - anchors.topMargin: 16 - Image { - anchors.centerIn: parent - source: "qrc:/svg/help_outline_white_24dp.svg" - width: 24 - height: 24 - } - } - } - Item { - width: 1 - height: 4 - } - Row { - CheckBox { - id: realDeviceIds - text: qsTr("Use real device (USB)-IDs") - checked: shortcutInfo.devices.realDeviceIds - onCheckedChanged: shortcutInfo.devices.realDeviceIds = checked - } - RoundButton { - onClicked: () => { - helpInfoDialog.titleText = qsTr("Use real device (USB)-IDs") - helpInfoDialog.text = - qsTr("Only enable if input's are not recognized by the game") - + "\n" - + qsTr("If enabled, device-hiding won't work.\nUse the \"Max. Controller count\" setting!") - - helpInfoDialog.open() - } - width: 48 - height: 48 - Material.elevation: 0 - anchors.topMargin: 16 - Image { - anchors.centerIn: parent - source: "qrc:/svg/help_outline_white_24dp.svg" - width: 24 - height: 24 - } - } - } - Item { - width: 1 - height: 4 - } - Row { - CheckBox { - id: emulateDS4 - text: qsTr("Emulate DS4") - checked: shortcutInfo.controller.emulateDS4 || false - onCheckedChanged: shortcutInfo.controller.emulateDS4 = checked - } - RoundButton { - onClicked: () => { - helpInfoDialog.titleText = qsTr("Emulate DS4") - helpInfoDialog.text = - qsTr("Emulates a DS4 instead of X360 Pad") - + "\n" - qsTr("for usage with, for example, PSNow") - + "\n" - + qsTr("If enabled you have to disable \"Playstation Configuration support\" in Steam") - helpInfoDialog.open() - } - width: 48 - height: 48 - Material.elevation: 0 - anchors.topMargin: 16 - Image { - anchors.centerIn: parent - source: "qrc:/svg/help_outline_white_24dp.svg" - width: 24 - height: 24 - } - } - } - Item { - width: 1 - height: 4 - } - Row { - leftPadding: 16 - Label { - text: qsTr("Max. emulated controllers") - topPadding: 16 - } - SpinBox { - id: maxControllersSpinBox - width: 128 - editable: true - value: shortcutInfo.controller.maxControllers - from: 0 - to: 4 - onValueChanged: shortcutInfo.controller.maxControllers = value - } - RoundButton { - onClicked: () => { - helpInfoDialog.titleText = qsTr("Max. emulated controllers") - helpInfoDialog.text = - qsTr("GlosSI will only provide [NUMBER] of controllers") - + "\n" - + qsTr("Required to set to actually connected controller count when using \"real device IDs\" ") - helpInfoDialog.open() - } - width: 48 - height: 48 - Material.elevation: 0 - anchors.topMargin: 16 - Image { - anchors.centerIn: parent - source: "qrc:/svg/help_outline_white_24dp.svg" - width: 24 - height: 24 - } - } - } - } - } - RPane { - width: parent.width / 2 - 8 - height: 248 - radius: 4 - Material.elevation: 32 - bgOpacity: 0.97 - Column { - spacing: 0 - width: parent.width - Row { - CheckBox { - id: windowMode - text: qsTr("Steam/GlosSI overlay as separate window") - checked: shortcutInfo.window.windowMode - onCheckedChanged: shortcutInfo.window.windowMode = checked - } - RoundButton { - onClicked: () => { - helpInfoDialog.titleText = qsTr("Steam/GlosSI overlay as separate window") - helpInfoDialog.text = - qsTr("Doesn't show overlay on top, but as separate window") - + "\n" - + qsTr("Use if blackscreen-issues are encountered.") - - helpInfoDialog.open() - } - width: 48 - height: 48 - Material.elevation: 0 - anchors.topMargin: 16 - Image { - anchors.centerIn: parent - source: "qrc:/svg/help_outline_white_24dp.svg" - width: 24 - height: 24 - } - } - } - Item { - width: 1 - height: 4 - } - - Row { - CheckBox { - id: disableOverlayCheckbox - text: qsTr("Disable Steam/GlosSI overlay") - checked: shortcutInfo.window.disableOverlay - onCheckedChanged: shortcutInfo.window.disableOverlay = checked - } - RoundButton { - onClicked: () => { - helpInfoDialog.titleText = qsTr("Disable Steam/GlosSI overlay") - helpInfoDialog.text = - qsTr("Only controller emulation - No extra window") - + "\n" - + qsTr("Might help with Steam remote play.") - - helpInfoDialog.open() - } - width: 48 - height: 48 - Material.elevation: 0 - anchors.topMargin: 16 - Image { - anchors.centerIn: parent - source: "qrc:/svg/help_outline_white_24dp.svg" - width: 24 - height: 24 - } - } - } - Item { - width: 1 - height: 4 - } - Row { - leftPadding: 16 - Label { - text: qsTr("GlosSI-Overlay scale") - topPadding: 16 - } - SpinBox { - id: scaleSpinBox - width: 172 - from: -100 - value: shortcutInfo.window.scale * 100 || 0 - to: 350 - stepSize: 10 - editable: true - - property int decimals: 2 - property real realValue: value / 100 - - validator: DoubleValidator { - bottom: Math.min(scaleSpinBox.from, scaleSpinBox.to) - top: Math.max(scaleSpinBox.from, scaleSpinBox.to) - } - - textFromValue: function(value, locale) { - return Number(value / 100).toLocaleString(locale, 'f', scaleSpinBox.decimals) - } - - valueFromText: function(text, locale) { - return Number.fromLocaleString(locale, text) * 100 - } - onValueChanged: function() { - if (value <= 0) { - shortcutInfo.window.scale = null - return - } - shortcutInfo.window.scale = value / 100 - } - } - RoundButton { - onClicked: () => { - helpInfoDialog.titleText = qsTr("GloSI-Overlay scaling") - helpInfoDialog.text = - qsTr("Scales the elements of the GlosSI-Overlay (not Steam Overlay)") - + "\n" - + qsTr(" <= 0.0 to use auto-detection") - - helpInfoDialog.open() - } - width: 48 - height: 48 - Material.elevation: 0 - anchors.topMargin: 16 - Image { - anchors.centerIn: parent - source: "qrc:/svg/help_outline_white_24dp.svg" - width: 24 - height: 24 - } - } - } - Item { - width: 1 - height: 4 - } - Row { - leftPadding: 16 - Label { - text: qsTr("Max. Overlay FPS") - topPadding: 16 - } - SpinBox { - id: maxFPSSpinBox - width: 172 - from: -1 - value: shortcutInfo.window.maxFps || 0 - to: 244 - stepSize: 5 - editable: true - - onValueChanged: function() { - if (value <= 0) { - shortcutInfo.window.maxFps = null - return - } - shortcutInfo.window.maxFps = value - } - } - RoundButton { - onClicked: () => { - helpInfoDialog.titleText = qsTr("Max. Overlay FPS") - helpInfoDialog.text = - qsTr("Restricts the FPS of the overlay to the given value") - + "\n" - + qsTr(" <= 0.0 to use screen refresh rate") - - helpInfoDialog.open() - } - width: 48 - height: 48 - Material.elevation: 0 - anchors.topMargin: 16 - Image { - anchors.centerIn: parent - source: "qrc:/svg/help_outline_white_24dp.svg" - width: 24 - height: 24 - } - } - } - } - } - } - - RPane { - width: parent.width - radius: 4 - Material.elevation: 32 - bgOpacity: 0.97 - Column { - spacing: 4 - Row { - Row { - CheckBox { - id: extendedLogging - text: qsTr("Extended Logging") - checked: shortcutInfo.extendedLogging - onCheckedChanged: shortcutInfo.extendedLogging = checked - } - // RoundButton { - // onClicked: () => { - // helpInfoDialog.titleText = qsTr("Hide (Real) Controllers") - // helpInfoDialog.text = - // qsTr("Hides real game controllers from the system\nThis may prevent doubled inputs") - // + "\n" - // + qsTr("You can change this setting and which devices are hidden in the GlosSI overlay") - - // helpInfoDialog.open() - // } - // width: 48 - // height: 48 - // Material.elevation: 0 - // anchors.topMargin: 16 - // Image { - // anchors.centerIn: parent - // source: "qrc:/svg/help_outline_white_24dp.svg" - // width: 24 - // height: 24 - // } - // } - } - } - } - } - } + AdvancedTargetSettings { + id: advancedTargetSettings } Item {