206 lines
6.1 KiB
QML
206 lines
6.1 KiB
QML
import QtQuick
|
|
import QtQuick.Window
|
|
import QtQuick.Controls
|
|
import QtQuick.Controls.Material
|
|
import QtQuick.Layouts
|
|
|
|
|
|
Window {
|
|
id: windowSignalEditor
|
|
|
|
width: 500
|
|
height: 400
|
|
|
|
Component.onCompleted: {
|
|
x = Screen.width / 2 - width / 2
|
|
y = Screen.height / 2 - height / 2
|
|
}
|
|
|
|
modality: Qt.ApplicationModal
|
|
flags: Qt.Window
|
|
|
|
signal saveParam(string type, var data, bool isNew)
|
|
signal deleteParam(string type, int ID)
|
|
|
|
property string paramType
|
|
property int paramID
|
|
property bool isNew
|
|
|
|
property var validator_freq: /^\d+(\.\d+)?$/
|
|
property var validator_all: /.*/
|
|
|
|
|
|
function load(type, sig_param, is_new) {
|
|
clearAll()
|
|
isNew = is_new
|
|
paramType = type
|
|
|
|
paramValue.placeholderText = paramType
|
|
|
|
if (isNew) {
|
|
paramID = 0
|
|
windowSignalEditor.title = 'Artemis - New ' + paramType
|
|
} else {
|
|
paramID = sig_param[0]
|
|
windowSignalEditor.title = 'Artemis - Edit ' + paramType
|
|
if (paramType === 'Frequency' || paramType === 'Bandwidth') {
|
|
var freq = changeUnit(sig_param[1])
|
|
paramValue.text = sig_param[1] / freq.scale
|
|
loadUnitComboBox(freq.unit)
|
|
} else {
|
|
paramValue.text = sig_param[1]
|
|
}
|
|
paramDescription.text = sig_param[2]
|
|
}
|
|
}
|
|
|
|
function save() {
|
|
if (paramType === 'Frequency' || paramType === 'Bandwidth') {
|
|
var scaleFactor = unitComboBox.currentValue.value
|
|
var mainValue = paramValue.text * scaleFactor
|
|
} else {
|
|
var mainValue = paramValue.text
|
|
}
|
|
var param = [paramID, mainValue, paramDescription.text]
|
|
saveParam(paramType, param, isNew)
|
|
changeSavedDialog.open()
|
|
}
|
|
|
|
function clearAll() {
|
|
paramValue.clear()
|
|
paramDescription.clear()
|
|
loadUnitComboBox('Hz')
|
|
}
|
|
|
|
function changeUnit(frequency) {
|
|
var digits = frequency.toString().length
|
|
|
|
if (digits < 4)
|
|
return { scale: 1, unit: "Hz" }
|
|
else if (digits < 7)
|
|
return { scale: Math.pow(10, 3), unit: "kHz" }
|
|
else if (digits < 10)
|
|
return { scale: Math.pow(10, 6), unit: "MHz" }
|
|
else
|
|
return { scale: Math.pow(10, 9), unit: "GHz" }
|
|
}
|
|
|
|
function loadUnitComboBox(unit) {
|
|
for (var idx = 0; idx < unitComboBox.count; idx ++) {
|
|
if (unit === unitComboBox.valueAt(idx).text) {
|
|
unitComboBox.currentIndex = idx
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
DialogMessage {
|
|
id: changeSavedDialog
|
|
title: 'Change Saved!'
|
|
message: 'Your changes have been successfully saved!'
|
|
standardButtons: Dialog.Ok
|
|
|
|
onAccepted: {
|
|
windowSignalEditor.close()
|
|
}
|
|
}
|
|
|
|
DialogMessage {
|
|
id: dialogDeleteConfirmation
|
|
modal: true
|
|
title: "Are you sure?"
|
|
message: "You are about to delete the selected " + paramType + ". The process cannot be undone."
|
|
messageType: "warn"
|
|
standardButtons: Dialog.Cancel | Dialog.Yes
|
|
|
|
onAccepted: {
|
|
deleteParam(paramType, paramID)
|
|
windowSignalEditor.close()
|
|
}
|
|
}
|
|
|
|
Page {
|
|
anchors.fill: parent
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
anchors.leftMargin: 10
|
|
anchors.rightMargin: 10
|
|
anchors.topMargin: 10
|
|
anchors.bottomMargin: 10
|
|
|
|
RowLayout {
|
|
|
|
TextField {
|
|
id: paramValue
|
|
visible: paramType !== 'Description' ? true : false
|
|
Layout.fillWidth: true
|
|
placeholderText: qsTr("Frequency")
|
|
validator: RegularExpressionValidator {
|
|
regularExpression: paramType === 'Frequency' || paramType === 'Bandwidth' ? validator_freq : validator_all
|
|
}
|
|
}
|
|
|
|
ComboBox {
|
|
id: unitComboBox
|
|
visible: paramType === 'Frequency' || paramType === 'Bandwidth' ? true : false
|
|
textRole: 'text'
|
|
model: ListModel {
|
|
ListElement { text: 'Hz'; value: 1 }
|
|
ListElement { text: 'kHz'; value: 1e3 }
|
|
ListElement { text: 'MHz'; value: 1e6 }
|
|
ListElement { text: 'GHz'; value: 1e9 }
|
|
}
|
|
}
|
|
}
|
|
|
|
Flickable {
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.topMargin: 5
|
|
TextArea.flickable: TextArea {
|
|
id: paramDescription
|
|
placeholderText: qsTr("Description")
|
|
font.pointSize: 10
|
|
wrapMode: TextEdit.WordWrap
|
|
}
|
|
ScrollBar.vertical: ScrollBar {
|
|
width: 10
|
|
}
|
|
}
|
|
|
|
RowLayout {
|
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
Layout.fillWidth: true
|
|
|
|
Button {
|
|
id: deleteButton
|
|
visible: isNew ? false : true
|
|
text: qsTr("Delete")
|
|
icon.source: "qrc:/images/icons/delete.svg"
|
|
display: AbstractButton.TextBesideIcon
|
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
onClicked: {
|
|
dialogDeleteConfirmation.open()
|
|
}
|
|
}
|
|
|
|
Item {
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
Button {
|
|
id: saveButton
|
|
text: qsTr("Save")
|
|
icon.source: "qrc:/images/icons/save.svg"
|
|
display: AbstractButton.TextBesideIcon
|
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
onClicked: {
|
|
save()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|