288 lines
8.8 KiB
QML
Raw Normal View History

2020-10-18 06:50:26 -05:00
/*
2023-01-22 23:51:35 -06:00
* Copyright (c) 2020-2023 Alex Spataru <https://github.com/alex-spataru>
2020-10-18 06:50:26 -05:00
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
2024-04-01 02:42:21 -05:00
import QtCore
2022-05-02 04:31:32 -05:00
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
2020-10-18 06:50:26 -05:00
import "../Widgets" as Widgets
2021-09-25 21:48:06 -05:00
import "SetupPanes" as SetupPanes
2020-10-18 06:50:26 -05:00
Item {
2021-09-13 11:51:35 -05:00
id: root
//
// Custom properties
//
property int setupMargin: 0
property int displayedWidth: 380 + app.spacing * 1.5
2021-09-24 15:07:43 -05:00
readonly property int maxItemWidth: column.width - 2 * spacing
2020-10-18 06:50:26 -05:00
//
// Displays the setup panel
//
function show() {
setupMargin = 0
}
//
// Hides the setup panel
//
function hide() {
setupMargin = -1 * displayedWidth
}
//
// Animations
//
visible: setupMargin > -1 * displayedWidth
Behavior on setupMargin {NumberAnimation{}}
2021-09-13 11:51:35 -05:00
//
// Save settings
//
Settings {
2020-10-18 06:50:26 -05:00
//
2021-09-13 11:51:35 -05:00
// Misc settings
//
2021-09-13 11:51:35 -05:00
property alias auto: commAuto.checked
property alias manual: commManual.checked
property alias tabIndex: tab.currentIndex
property alias csvExport: csvLogging.checked
2021-09-13 11:51:35 -05:00
//
// MQTT settings
//
property alias mqttHost: mqtt.host
property alias mqttPort: mqtt.port
property alias mqttUser: mqtt.user
property alias mqttMode: mqtt.mode
property alias mqttTopic: mqtt.topic
property alias mqttVersion: mqtt.version
property alias mqttPassword: mqtt.password
//
2021-09-13 11:51:35 -05:00
// App settings
2021-02-01 18:55:15 -05:00
//
2021-09-13 11:51:35 -05:00
property alias language: settings.language
property alias tcpPlugins: settings.tcpPlugins
property alias windowShadows: settings.windowShadows
2021-09-13 11:51:35 -05:00
}
//
// Update manual/auto checkboxes
//
Connections {
target: Cpp_JSON_Generator
function onOperationModeChanged() {
2021-09-30 23:15:32 -05:00
commAuto.checked = (Cpp_JSON_Generator.operationMode === 1)
commManual.checked = (Cpp_JSON_Generator.operationMode === 0)
}
2021-09-13 11:51:35 -05:00
}
//
// Window
//
Widgets.Window {
gradient: true
title: qsTr("Setup")
anchors.fill: parent
anchors.leftMargin: 0
headerDoubleClickEnabled: false
icon.source: "qrc:/icons/settings.svg"
anchors.margins: (app.spacing * 1.5) - 5
2021-10-06 16:58:35 -05:00
backgroundColor: Cpp_ThemeManager.paneWindowBackground
//
// Control arrangement
2021-02-01 18:55:15 -05:00
//
ColumnLayout {
id: column
anchors.fill: parent
spacing: app.spacing / 2
anchors.margins: app.spacing * 1.5
//
// Comm mode selector
//
Label {
font.bold: true
text: qsTr("Communication Mode") + ":"
} RadioButton {
id: commAuto
checked: true
2021-09-24 15:07:43 -05:00
Layout.maximumWidth: root.maxItemWidth
2021-09-23 22:56:03 -05:00
text: qsTr("No parsing (device sends JSON data)")
onCheckedChanged: {
if (checked)
Cpp_JSON_Generator.setOperationMode(1)
else
Cpp_JSON_Generator.setOperationMode(0)
}
} RadioButton {
id: commManual
checked: false
2021-09-24 15:07:43 -05:00
Layout.maximumWidth: root.maxItemWidth
2021-09-23 22:56:03 -05:00
text: qsTr("Parse via JSON project file")
onCheckedChanged: {
if (checked)
Cpp_JSON_Generator.setOperationMode(0)
else
Cpp_JSON_Generator.setOperationMode(1)
2021-02-17 14:36:39 -05:00
}
2021-02-01 18:55:15 -05:00
}
//
// Map file selector button
//
Button {
2021-02-01 18:55:15 -05:00
Layout.fillWidth: true
opacity: enabled ? 1 : 0.5
enabled: commManual.checked
2021-09-24 15:07:43 -05:00
Layout.maximumWidth: root.maxItemWidth
onClicked: Cpp_JSON_Generator.loadJsonMap()
2021-09-23 22:56:03 -05:00
text: (Cpp_JSON_Generator.jsonMapFilename.length ? qsTr("Change project file (%1)").arg(Cpp_JSON_Generator.jsonMapFilename) :
qsTr("Select project file") + "...")
}
2021-02-01 18:55:15 -05:00
//
// Spacer
//
Item {
height: app.spacing / 2
2021-02-01 18:55:15 -05:00
}
//
// Enable/disable CSV logging
//
RowLayout {
Layout.fillWidth: true
Switch {
id: csvLogging
text: qsTr("Create CSV file")
Layout.alignment: Qt.AlignVCenter
checked: Cpp_CSV_Export.exportEnabled
2021-09-24 15:07:43 -05:00
Layout.maximumWidth: root.maxItemWidth
2021-10-06 16:58:35 -05:00
palette.highlight: Cpp_ThemeManager.csvCheckbox
2020-10-18 06:50:26 -05:00
onCheckedChanged: {
if (Cpp_CSV_Export.exportEnabled !== checked)
Cpp_CSV_Export.exportEnabled = checked
}
}
2020-10-18 06:50:26 -05:00
Item {
Layout.fillWidth: true
}
2021-01-04 22:11:59 -06:00
RoundButton {
icon.width: 24
icon.height: 24
icon.color: Cpp_ThemeManager.text
Layout.alignment: Qt.AlignVCenter
icon.source: "qrc:/icons/help.svg"
onClicked: Qt.openUrlExternally("https://github.com/Serial-Studio/Serial-Studio/wiki")
}
}
//
// Spacer
//
Item {
height: app.spacing / 2
}
//
// Tab bar
//
TabBar {
height: 24
id: tab
Layout.fillWidth: true
2021-09-24 15:07:43 -05:00
Layout.maximumWidth: root.maxItemWidth
TabButton {
text: qsTr("Device")
2022-02-17 22:32:49 -06:00
height: tab.height + 3
width: implicitWidth + 2 * app.spacing
}
TabButton {
text: qsTr("MQTT")
height: tab.height + 3
width: implicitWidth + 2 * app.spacing
}
TabButton {
text: qsTr("Settings")
height: tab.height + 3
width: implicitWidth + 2 * app.spacing
2021-02-15 16:53:00 -05:00
}
2021-02-10 21:03:32 -05:00
}
2021-01-04 22:11:59 -06:00
//
// Tab bar contents
//
StackLayout {
id: stack
clip: true
Layout.fillWidth: true
2022-05-01 20:11:13 -05:00
Layout.fillHeight: true
currentIndex: tab.currentIndex
Layout.topMargin: -parent.spacing - 1
2020-10-18 06:50:26 -05:00
SetupPanes.Hardware {
id: hardware
2022-05-01 20:11:13 -05:00
Layout.fillWidth: true
Layout.fillHeight: true
background: TextField {
enabled: false
palette.base: Cpp_ThemeManager.setupPanelBackground
}
2020-10-18 06:50:26 -05:00
}
SetupPanes.MQTT {
id: mqtt
2022-05-01 20:11:13 -05:00
Layout.fillWidth: true
Layout.fillHeight: true
background: TextField {
enabled: false
palette.base: Cpp_ThemeManager.setupPanelBackground
}
}
SetupPanes.Settings {
id: settings
2022-05-01 20:11:13 -05:00
Layout.fillWidth: true
Layout.fillHeight: true
background: TextField {
enabled: false
palette.base: Cpp_ThemeManager.setupPanelBackground
}
}
2020-10-18 06:50:26 -05:00
}
}
}
}