Index: leahi.qrc =================================================================== diff -u -r0dfba44fb7172b9458d161b3ed5f54527f93b698 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- leahi.qrc (.../leahi.qrc) (revision 0dfba44fb7172b9458d161b3ed5f54527f93b698) +++ leahi.qrc (.../leahi.qrc) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -49,7 +49,6 @@ sources/gui/qml/dialogs/headerbar/HeaderbarWiFi.qml - sources/gui/qml/dialogs/headerbar/HeaderbarStorage.qml sources/gui/qml/dialogs/headerbar/HeaderbarSettings.qml sources/gui/qml/dialogs/headerbar/HeaderbarPrescription.qml sources/gui/qml/dialogs/headerbar/HeaderbarInformation.qml @@ -98,7 +97,6 @@ resources/images/HomeBackground.png resources/images/CloudSync.png resources/images/Information.png - resources/images/Storage.png resources/images/help.png resources/images/Menu_Dot.png resources/images/ArrowLeftDisabled.png @@ -110,6 +108,8 @@ resources/images/eye_closed.png resources/images/stepCheck.png resources/images/complete_check.png + resources/images/Brightness.png + resources/images/Volume.png sources/gui/qml/components/MainMenu.qml @@ -175,6 +175,7 @@ sources/gui/qml/components/IdleTimer.qml sources/gui/qml/components/TreatmentCompleteButton.qml sources/gui/qml/components/RangedValue.qml + sources/gui/qml/components/SDCInfo.qml sources/gui/qml/compounds/PressureRangeSlider.qml @@ -191,6 +192,7 @@ sources/gui/qml/compounds/InstitutionalContainer.qml sources/gui/qml/compounds/ValueAdjusterCustom.qml sources/gui/qml/compounds/LabelUnitValueAdjuster.qml + sources/gui/qml/compounds/SettingsSlider.qml qtquickcontrols2.conf Index: sources/gui/qml/components/BaseComboBox.qml =================================================================== diff -u -rb12853c86ef9e517667516dc3e47bca07349cedf -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/components/BaseComboBox.qml (.../BaseComboBox.qml) (revision b12853c86ef9e517667516dc3e47bca07349cedf) +++ sources/gui/qml/components/BaseComboBox.qml (.../BaseComboBox.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -35,8 +35,8 @@ width : 300 displayText : _root.isActive ? currentText : Variables.emptyEntry currentIndex : 0 - font.pixelSize : Fonts.fontPixelTextRectTitle - leftPadding : centerHorizontally || ! _root.isActive ? 30 : 10 + font.pixelSize : Fonts.fontPixelDefaultButton + leftPadding : centerHorizontally || ! _root.isActive ? 30 : Variables.defaultMargin signal clear() @@ -45,7 +45,7 @@ contentItem: Text { id: _displayText text : canOff && parent.displayText === "0" ? qsTr("OFF") : parent.displayText color : Colors.offWhite - font.pixelSize : _root.isActive ? Fonts.fontPixelTextRectTitle : Fonts.fontPixelValueControl + font.pixelSize : _root.isActive ? Fonts.fontPixelDefaultButton : Fonts.fontPixelValueControl verticalAlignment : Text.AlignVCenter horizontalAlignment : centerHorizontally || ! _root.isActive ? Text.AlignHCenter : undefined rightPadding : _root.isActive ? 15 : 0 @@ -69,7 +69,7 @@ font : _root.font verticalAlignment : Text.AlignVCenter horizontalAlignment : centerHorizontally ? Text.AlignHCenter : undefined - leftPadding : 10 + leftPadding : Variables.defaultMargin elide : Text.ElideRight } Index: sources/gui/qml/components/HeaderBar.qml =================================================================== diff -u -r0dfba44fb7172b9458d161b3ed5f54527f93b698 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/components/HeaderBar.qml (.../HeaderBar.qml) (revision 0dfba44fb7172b9458d161b3ed5f54527f93b698) +++ sources/gui/qml/components/HeaderBar.qml (.../HeaderBar.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -141,25 +141,25 @@ onPressed : _endTreatmentDialog.open() } - VitalsButton { id : _vitalsButton + IconButton { id : _prescriptionButton + iconSize : Variables.headerIconDiameter + iconImageSource : "qrc:/images/iPrescription" extraSpace : _headerButtonRow.spacing visible : vTDOpMode.preTreatment || vTDOpMode.inTreatment || - vTDOpMode.postTreatment || - vTDOpMode.validateParameters + vTDOpMode.postTreatment - onPressed : _treatmentAdjustmentVitals.open() + onPressed : _headerbarPrescription.open() } - IconButton { id : _prescriptionButton - iconSize : Variables.headerIconDiameter - iconImageSource : "qrc:/images/iPrescription" + VitalsButton { id : _vitalsButton extraSpace : _headerButtonRow.spacing visible : vTDOpMode.preTreatment || vTDOpMode.inTreatment || - vTDOpMode.postTreatment + vTDOpMode.postTreatment || + vTDOpMode.validateParameters - onPressed : _headerbarPrescription.open() + onPressed : _treatmentAdjustmentVitals.open() } IconButton { id : _wifiButton @@ -170,23 +170,16 @@ onPressed : _headerbarWifi.openDialog(_wifiButton) } - IconButton { id : _cloudSyncButton - iconSize : Variables.headerIconDiameter - iconImageSource : "qrc:/images/iCloudSync" - extraSpace : _headerButtonRow.spacing - enabled : false + // TODO Phase 2 👋👋👋 +// IconButton { id : _cloudSyncButton +// iconSize : Variables.headerIconDiameter +// iconImageSource : "qrc:/images/iCloudSync" +// extraSpace : _headerButtonRow.spacing +// enabled : false - onPressed : print("CloudSync button pressed!") - } +// onPressed : print("CloudSync button pressed!") +// } - IconButton { id : _storageButton - iconSize : Variables.headerIconDiameter - iconImageSource : "qrc:/images/iStorage" - extraSpace : _headerButtonRow.spacing - - onPressed : _headerbarStorage.openDialog(_storageButton) - } - IconButton { id : _settingsButton iconSize : Variables.headerIconDiameter iconImageSource : "qrc:/images/iSettings" Index: sources/gui/qml/components/ProgressBar.qml =================================================================== diff -u -r018005dc067da01f25899ce83e4ce8f14e5013ae -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/components/ProgressBar.qml (.../ProgressBar.qml) (revision 018005dc067da01f25899ce83e4ce8f14e5013ae) +++ sources/gui/qml/components/ProgressBar.qml (.../ProgressBar.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -73,7 +73,6 @@ } height : Variables.rangeMarkerHeight - hasHandle : true unitText : _root.unitText decimal : _root.decimal Index: sources/gui/qml/components/RangeBar.qml =================================================================== diff -u -rca5a17d5abaae0982922faca123d6f189135d413 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/components/RangeBar.qml (.../RangeBar.qml) (revision ca5a17d5abaae0982922faca123d6f189135d413) +++ sources/gui/qml/components/RangeBar.qml (.../RangeBar.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -98,7 +98,6 @@ x : ((parent.width * (_private.val - _private.min)) / (_private.max - _private.min)) text.visible: true text.font.pixelSize: _root.markerFontSize - hasHandle : true height : markerHeight color : markerColor valueOnTop : true Index: sources/gui/qml/components/RangeMarker.qml =================================================================== diff -u -r0022c3993c47e74c2d17c7f07f78fa1751a034f6 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/components/RangeMarker.qml (.../RangeMarker.qml) (revision 0022c3993c47e74c2d17c7f07f78fa1751a034f6) +++ sources/gui/qml/components/RangeMarker.qml (.../RangeMarker.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -28,11 +28,9 @@ property int decimal : 0 property alias text : _textValue - property alias handle : _handle property alias font : _textValue.font property color color : Colors.rangeMarker property alias thickness : _root.width - property alias hasHandle : _handle.visible property bool valueOnTop : false property string unitText : "" @@ -43,19 +41,6 @@ bottom : parent.bottom } - Rectangle { id: _handle - visible : false - - width : _root.width * 3 - height : width - radius : width - color : _root.color - anchors { - top : _root.top - horizontalCenter: parent.horizontalCenter - } - } - Rectangle { id: _stick width : _root.width height : _root.height @@ -75,12 +60,12 @@ right : valueOnTop ? parent.left : undefined top : valueOnTop ? undefined : parent.top - bottom : valueOnTop ? _handle.top : + bottom : valueOnTop ? _stick.top : undefined bottomMargin: valueOnTop ? 5 : 0 rightMargin : valueOnTop ? -12 : 5 topMargin : valueOnTop ? 0 : -5 - horizontalCenter: valueOnTop ? _handle.horizontalCenter : undefined + horizontalCenter: valueOnTop ? _stick.horizontalCenter : undefined horizontalCenterOffset: { if (valueOnTop) { if (_root.parent !== undefined) { Index: sources/gui/qml/components/SDCInfo.qml =================================================================== diff -u --- sources/gui/qml/components/SDCInfo.qml (revision 0) +++ sources/gui/qml/components/SDCInfo.qml (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -0,0 +1,89 @@ + +// Qt +import QtQuick 2.12 + +// Qml imports +import "qrc:/components" +import "qrc:/globals" + +Item { id: _root + + component SDInfoItem: Item { + width : _sdInfoText.contentWidth + height : 20 + + property alias color : _sdCircle.color + property alias text : _sdInfoText.text + + Rectangle { id: _sdCircle + anchors.right : _sdInfoText.left + anchors.rightMargin : Variables.defaultMargin + width : 12 + height : width + radius : height + } + + Text { id: _sdInfoText + anchors { + right : parent.right + verticalCenter : _sdCircle.verticalCenter + } + color : Colors.dialogText + font.pixelSize : Fonts.fontPixelTouchAreaTitle + } + } + + Text { id: _sdCardText + anchors.top : parent.top + anchors.left : parent.left + color : Colors.dialogText + text : ("%1").arg(qsTr("SD-Card")) + + font.pixelSize : Fonts.fontPixelDialogText + } + + ProgressBar { id: _progress + anchors { + top : _sdCardText.bottom + topMargin : Variables.defaultMargin + } + + minimum : 0 + maximum : _GuiView.sdTotal + value : _GuiView.sdTotal - _GuiView.sdAvail + width : parent.width + height : 10 + radius : height + bgColor : Colors.dialogShadowColor + color : Colors.highlightProgressBar + border.width : 0 + minText .visible : false + maxText .visible : false + marker .visible : false + progress.border.width: 0 + } + + Text { id: _sdInfo + anchors { + right : _progress.right + top : _progress.bottom + topMargin : 10 + } + color : Colors.dialogText + font.pixelSize : Fonts.fontPixelTouchAreaTitle + text : ("%1 of %2") .arg(("%1 %2 %3") .arg(Variables.sizeConverted( _GuiView.sdAvail, 1000, 3)) .arg(qsTr("Free")).arg(qsTr("MB"))) + .arg(("%1 %2") .arg(Variables.sizeConverted( _GuiView.sdTotal, 1000, 3)) .arg(qsTr("MB"))) + } + + SDInfoItem { id: _sdUsedContainer + anchors { + bottom : _progress.top + bottomMargin: _sdInfo.anchors.topMargin + right : _progress.right + } + color : Colors.highlightProgressBar + text : ("%1 %2 %3") .arg(Variables.sizeConverted( _GuiView.sdTotal - _GuiView.sdAvail, 1000, 3)) + .arg(qsTr("MB")) + .arg(qsTr("Used")) + } +} Index: sources/gui/qml/compounds/SettingsSlider.qml =================================================================== diff -u --- sources/gui/qml/compounds/SettingsSlider.qml (revision 0) +++ sources/gui/qml/compounds/SettingsSlider.qml (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -0,0 +1,123 @@ + +import "qrc:/globals" +import "qrc:/components" + +import QtQuick 2.12 +import QtQuick.Controls 2.15 + +Item { id: _root + height : Variables.contentHeight + + property alias value : _slider.value + property alias valueText : _value.text + property alias iconImage : _image.source + property alias slider : _slider + + readonly property color sliderBkgndColor: Colors.dialogShadowColor + readonly property color sliderColor : Colors.highlightProgressBar + readonly property color valueColor : Colors.dialogValueColor + readonly property var valueFont : Qt.font ({ pixelSize: 28, weight: Font.DemiBold }) + + readonly property int sliderMargins : Variables.defaultMargin * 3.5 + readonly property int hitboxMargins : Variables.defaultMargin * -2 + readonly property int knobDiameter : 20 + readonly property int hitboxHeight : 70 + + + Image { id : _image + anchors { + left : parent.left + verticalCenter : parent.verticalCenter + } + } + + Text { id: _value + anchors { + right : parent.right + verticalCenter : parent.verticalCenter + } + color : _root.valueColor + font : _root.valueFont + width : 43 + horizontalAlignment : Text.AlignHCenter + } + + Slider { id: _slider + anchors { + left : _image.right + leftMargin : _root.hitboxMargins // negative margins added to create larger hitbox for touch + right : _value.left + rightMargin : _root.hitboxMargins // negative margins added to create larger hitbox for touch + verticalCenter : parent.verticalCenter + } + + height : _root.hitboxHeight + stepSize : 1 + from : 1 + to : 5 + snapMode : Slider.SnapAlways + + background: Rectangle { id: _backgroundContainer + color : Colors.transparent + height : parent.height // hitbox height + radius : height + + Rectangle { id: _background + anchors { + verticalCenter : parent.verticalCenter + left : parent.left + leftMargin : _root.sliderMargins// margins added to colored background to make a larger hitbox + right : parent.right + rightMargin : _root.sliderMargins // margins added to colored background to make a larger hitbox + } + height : 5 // visible height + radius : height + color : _root.sliderBkgndColor + + Rectangle { id: _progressBackground + anchors.verticalCenter: parent.verticalCenter + + width : slider.visualPosition * parent.width + height : _background.height + radius : height + color : _root.sliderColor + } + } + } + + handle: Rectangle { id: _knob + anchors.verticalCenter : parent.verticalCenter + // move knox with end of progress. + // visual position - visible slider + shift knob by left margin plus half the diameter + x : (slider.visualPosition * (parent.width - _root.sliderMargins * 2 )) + _root.sliderMargins - (_root.knobDiameter / 2) + width : _root.knobDiameter + height : width + radius : width + color : slider.pressed ? _root.valueColor : _root.sliderColor + } + } + + // --- Tick marks above slider --- + Row { id: _ticks + anchors { + left : _slider.left + leftMargin : _root.sliderMargins + right : _slider.right + rightMargin : _root.sliderMargins + bottom : _slider.top + bottomMargin: -10 + } + // space evenly and account for background hitbox margins + spacing : (_slider.width - ( _root.sliderMargins * 2 + 6 ) ) / (_slider.to - _slider.from) + + Repeater { + model: 5 + + Rectangle { + width : 1 + height : 4 + color : _root.sliderColor + } + } + } +} Index: sources/gui/qml/compounds/ValueAdjusterCustom.qml =================================================================== diff -u -re49c956894f999f6539b0c404dd1c9b18a76bb4b -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/compounds/ValueAdjusterCustom.qml (.../ValueAdjusterCustom.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) +++ sources/gui/qml/compounds/ValueAdjusterCustom.qml (.../ValueAdjusterCustom.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -24,13 +24,40 @@ property var model : [] property int currentIndex : 0 property int length : model.length === 0 ? 0 : model.length - readonly property bool canIncrement : _root.currentIndex < _root.length - 1 - readonly property bool canDecrement : _root.currentIndex > 0 + readonly property bool canIncrement : isActive ? _root.currentIndex < _root.length - 1 : true + readonly property bool canDecrement : isActive ? _root.currentIndex > 0 : true property bool grabbed : false property bool canOff : false property bool editable : true - property int textWidth : 230 + property bool isActive : true + property bool canRefresh : false + property int defaultValue : 0 + property int value : 0 + signal didChange (real vValue) + signal didActiveChange (bool vState) + + onValueChanged : currentIndex = value + + onIsActiveChanged : { + if ( canRefresh ) { canRefresh = false; return } + + if ( isActive ) { didChange(_root.defaultValue) } + } + + function refresh() { canRefresh = true } + + function clear() { didActiveChange(false) } + + Text { id: _currentItem + anchors.centerIn : parent + text : _root.model[_root.currentIndex] !== undefined ? + _root.isActive ? _root.canOff ? _root.currentIndex === 0 ? qsTr("OFF") : _root.model[_root.currentIndex] : + _root.model[_root.currentIndex] : Variables.emptyEntry : "" + color : Colors.offWhite + font.pixelSize : Fonts.fontPixelValueControl + } + Slider { id: _slider property real pos : 0 @@ -76,6 +103,8 @@ drag.axis : Drag.XAxis // only horizontal onClicked: { + if ( _root.editable ) { didActiveChange(true); focus = true } + _slider.opacity = 0 } @@ -85,6 +114,8 @@ } onPressAndHold: { + if ( _root.editable ) { didActiveChange(true); focus = true } + _root.grabbed = true } @@ -95,8 +126,8 @@ _slider.pos = Math.max(0, Math.min(1, mouse.x / parent.width)) let raw = _slider.from + _slider.pos * (_slider.to - _slider.from) let stepped = Math.round((raw - _slider.from) / _slider.stepSize) * _slider.stepSize + _slider.from - _root.currentIndex = stepped + didChange(stepped) } } @@ -119,39 +150,37 @@ Behavior on opacity { NumberAnimation { duration: 200 } } } - Row { - spacing : Variables.defaultMargin // spacing between items to match others - anchors.centerIn : parent - - IconButton { id: _leftArrow - iconSize : Variables.circleButtonDefaultDiameter - enabled : _root.canDecrement - visible : _root.editable - iconImageSource : enabled ? "qrc:/images/iArrowLeft" : - "qrc:/images/iArrowLeftDisabled" - onClicked : _root.currentIndex -= 1 + IconButton { id: _leftArrow + anchors { + verticalCenter : _root.verticalCenter + left : _root.left + leftMargin : Variables.defaultMargin } - - // Display current item - Text { id: _currentItem - text : _root.model[_root.currentIndex] !== undefined ? - _root.canOff ? _root.currentIndex === 0 ? qsTr("OFF") : _root.model[_root.currentIndex] : - _root.model[_root.currentIndex] : "" - color : Colors.offWhite - font.pixelSize : Fonts.fontPixelValueControl - horizontalAlignment : Text.AlignHCenter - verticalAlignment : Text.AlignVCenter - height : parent.height - width : _root.editable ? _root.textWidth : parent.width + iconSize : Variables.circleButtonDefaultDiameter + enabled : _root.canDecrement + visible : _root.editable + iconImageSource : enabled ? "qrc:/images/iArrowLeft" : + "qrc:/images/iArrowLeftDisabled" + onClicked : { + if ( ! isActive ) { didActiveChange(true); return } + didChange(_root.currentIndex -= 1) } + } - IconButton { id: _rightArrow - iconSize : Variables.circleButtonDefaultDiameter - enabled : _root.canIncrement - visible : _root.editable - iconImageSource : enabled ? "qrc:/images/iArrowRight" : - "qrc:/images/iArrowRightDisabled" - onClicked : _root.currentIndex += 1 + IconButton { id: _rightArrow + anchors { + verticalCenter : _root.verticalCenter + right : _root.right + rightMargin : Variables.defaultMargin } + iconSize : Variables.circleButtonDefaultDiameter + enabled : _root.canIncrement + visible : _root.editable + iconImageSource : enabled ? "qrc:/images/iArrowRight" : + "qrc:/images/iArrowRightDisabled" + onClicked : { + if ( ! isActive ) { didActiveChange(true); return } + didChange(_root.currentIndex += 1) + } } } Index: sources/gui/qml/dialogs/EndTreatmentDialog.qml =================================================================== diff -u -r56b0b13aa9f9e7ae201bce1843015fe5b4b43d2c -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/dialogs/EndTreatmentDialog.qml (.../EndTreatmentDialog.qml) (revision 56b0b13aa9f9e7ae201bce1843015fe5b4b43d2c) +++ sources/gui/qml/dialogs/EndTreatmentDialog.qml (.../EndTreatmentDialog.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -7,7 +7,6 @@ confirmText : qsTr("End Treatment") cancelText : qsTr("Stay On Treatment") - y : Math.round((Variables.applicationHeight - height) / 2) - Variables.headerHeight width : 600 height : 600 backgroundColor : Colors.darkDialogColor Index: sources/gui/qml/dialogs/LockDialog.qml =================================================================== diff -u -rca05e940ea4a0c567acb05c4c8777dea079b0f08 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/dialogs/LockDialog.qml (.../LockDialog.qml) (revision ca05e940ea4a0c567acb05c4c8777dea079b0f08) +++ sources/gui/qml/dialogs/LockDialog.qml (.../LockDialog.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -27,8 +27,8 @@ width : height radius : height color : "transparent" - border.color: _root.isLocked ? "#6697D2" : - "#A47E38" + border.color: _root.isLocked ? "#A47E38" : + "#6697D2" border.width: 2 Image { id : _iconImage @@ -38,17 +38,17 @@ height : 80 width : 80 fillMode: Image.PreserveAspectFit - source : _root.isLocked ? "qrc:/images/iUnlock" : - "qrc:/images/iLock" + source : _root.isLocked ? "qrc:/images/iLock" : + "qrc:/images/iUnlock" } Rectangle { id: _innerCircle objectName: "inncerCircle" anchors.centerIn: parent color : "transparent" - border.color : _root.isLocked ? "#8FC1FE" : - "#CDAF78" + border.color : _root.isLocked ? "#CDAF78" : + "#8FC1FE" border.width : 1 height : parent.height - 20 width : height Index: sources/gui/qml/dialogs/NotificationDialog.qml =================================================================== diff -u -r41ba9331e6a540df0c8eced0c4d3b8684afa9afa -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/dialogs/NotificationDialog.qml (.../NotificationDialog.qml) (revision 41ba9331e6a540df0c8eced0c4d3b8684afa9afa) +++ sources/gui/qml/dialogs/NotificationDialog.qml (.../NotificationDialog.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -73,7 +73,7 @@ // TODO: disable doubleClicked later. this is only for diagnostic purpose when alarm dialog covers the entire screen. MouseArea { id: _minimizeArea anchors.fill : parent - onDoubleClicked : { if ( ! _root.minVisible ) _sdcProgressItem.doubleClicked() } // call the sdcard.double click to pop the DiagnosticsDialog + onDoubleClicked : { if ( ! _root.minVisible ) _diagnosticsDialog.open() } } Text { id: _title Index: sources/gui/qml/dialogs/headerbar/HeaderbarInformation.qml =================================================================== diff -u -r164ece178bc4bbe6d31605e6ee711f513bdfc48a -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/dialogs/headerbar/HeaderbarInformation.qml (.../HeaderbarInformation.qml) (revision 164ece178bc4bbe6d31605e6ee711f513bdfc48a) +++ sources/gui/qml/dialogs/headerbar/HeaderbarInformation.qml (.../HeaderbarInformation.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -1,5 +1,6 @@ import QtQuick 2.12 +import "qrc:/" import "qrc:/components" import "qrc:/globals" @@ -8,6 +9,7 @@ readonly property int rightColumnWidth : 325 readonly property int leftColumnWidth : 170 readonly property int columnSpacing : Variables.defaultMargin * 3 + readonly property color infoColor : "#2E5E92" readonly property var _dataModel: [ { name: qsTr("OS Version" ) , value: vDevice.osVersion }, @@ -48,7 +50,7 @@ anchors.verticalCenter: parent.verticalCenter Text { id: _name - color : "#2E5E92" + color : _root.infoColor text : modelData.name width : leftColumnWidth font.pixelSize : Fonts.fontPixelDialogText @@ -77,6 +79,11 @@ } } + SDCInfo { id: _sdCardInfo + width : parent.width + height : 75 + } + Row { id: _qrRow spacing : Variables.defaultMargin anchors.left : parent.left @@ -87,8 +94,8 @@ Text { id: _qrCodeInstructions anchors.bottom : _qrCode.bottom - text : qsTr("Scan for electronic instructions for use (eIFU)" ) - color : Colors.dialogText + text : qsTr("Customer Service Number: %1\nScan for electronic instructions for use (eIFU)").arg("(123) 456-7890") + color : _root.infoColor font.pixelSize : Fonts.fontPixelDialogText } } Index: sources/gui/qml/dialogs/headerbar/HeaderbarSettings.qml =================================================================== diff -u -r56c2adbc6e724c09d5ca9d61cb0a1581d46daf02 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/dialogs/headerbar/HeaderbarSettings.qml (.../HeaderbarSettings.qml) (revision 56c2adbc6e724c09d5ca9d61cb0a1581d46daf02) +++ sources/gui/qml/dialogs/headerbar/HeaderbarSettings.qml (.../HeaderbarSettings.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -1,144 +1,60 @@ -import QtQuick 2.12 + import "qrc:/components" +import "qrc:/compounds" import "qrc:/globals" + +import QtQuick 2.12 +//import QtQuick.Controls 2.15 + HeaderBarPopup { id: _root - readonly property int sliderWidth : 430 - readonly property color sliderBkgndColor : Colors.dialogShadowColor - readonly property color valueColor : Colors.dialogValueColor - padding : Variables.defaultMargin + padding : Variables.defaultMargin * 2 QtObject { id: _private - readonly property var textFont : Qt.font ({ pixelSize: Fonts.fontPixelDialogText, weight: Font.Medium }) - readonly property var valueFont : Qt.font ({ pixelSize: 28, weight: Font.DemiBold }) - readonly property int columnWidth : sliderWidth + padding * 2 - readonly property int columnSpacing : Variables.defaultMargin * 2 - readonly property int itemHeight : 30 + readonly property int sliderWidth : 430 + readonly property int columnWidth : sliderWidth + padding * 2 } contentItem: Column { id : _dialogColumn anchors.centerIn : parent width : _private.columnWidth - spacing : Variables.defaultMargin + spacing : Variables.defaultMargin * 2 - Column { id: _brightness - width : _private.columnWidth - spacing : _private.columnSpacing + SettingsSlider { id: _brightness + width : _private.columnWidth + value : vDevice.brightnesss ?? 0 + valueText : vDevice.brightnesss ?? Variables.emptyEntry + iconImage : "qrc:/images/iBrightness" - Item { id: _brightnessTextItem - height : _private.itemHeight - width : parent.width + onValueChanged : vDevice.brightness = slider.value + } - Text { id: _brightnessText - anchors.left : parent.left - anchors.verticalCenter : parent.verticalCenter - text : ("%1: ").arg(qsTr("Brightness")) - color : Colors.dialogText - font : _private.textFont - } + SettingsSlider { id: _volume + width : _private.columnWidth + value : vAdjustmentAlarmVolume.hdAlarmVolume ?? 0 + valueText : vAdjustmentAlarmVolume.hdAlarmVolume ?? Variables.emptyEntry + iconImage : "qrc:/images/iVolume" - Text { id: _brightnessValue - anchors.left : _brightnessText.right - anchors.bottom : _brightnessText.bottom - text : ("%1").arg(vDevice.brightnesss) - color : _root.valueColor - font : _private.valueFont - } - } - - Slider { id : _brightnessSlider - anchors.horizontalCenter: parent.horizontalCenter - width : _root.sliderWidth - height : 10 - showMinMaxText : false - step : 1 // no zero - minimum : 1 - maximum : 5 - ticks : true - unit : "" - bgColor : _root.sliderBkgndColor - diameter : 26 - hasBorder : false - handleBorderColor : Colors.highlightProgressBar - - onReleased : vDevice.brightness = _brightnessSlider.value - - Connections { target: vDevice - // in case the value is rejected it will be set to the previous value - // also the init value shall be set when navigate to the screen - function onBrightnessChanged ( vValue ) { _brightnessSlider.reset(vValue) } - - // TODO do something with rejection message - function onStatusChanged ( vValue ) { print("**** Brightness Status: " + vValue) } - } - } + onValueChanged : vAdjustmentAlarmVolume.doAdjustment( slider.value ) } + } - Line { id: _divider - anchors.horizontalCenter: parent.horizontalCenter - length : parent.width - color : _root.sliderBkgndColor - } - - Column { id: _volume - width : _private.columnWidth - spacing : _private.columnSpacing - - Item { id: _volumeTextItem - height : _private.itemHeight - width : parent.width - - Text { id: _volumeText - anchors.left : parent.left - anchors.verticalCenter : parent.verticalCenter - text : ("%1: ").arg(qsTr("Alarm Volume")) - color : Colors.dialogText - font : _private.textFont - } - - Text { id: _volumeValue - anchors.left : _volumeText.right - anchors.bottom : _volumeText.bottom - text : vAdjustmentAlarmVolume.hdAlarmVolume - color : _root.valueColor - font : _private.valueFont - } + Connections { target: vAdjustmentAlarmVolume + function onAdjustmentTriggered ( vValue ) { + if ( vAdjustmentAlarmVolume.adjustment_Accepted ) { + vSettings .alarmVolume = vAdjustmentAlarmVolume.hdAlarmVolume } - - Slider { id : _volumeSlider - anchors.horizontalCenter: parent.horizontalCenter - width : _root.sliderWidth - height : 10 - showMinMaxText : false - step : 1 // no zero - minimum : 1 - maximum : 5 - ticks : true - unit : "" - bgColor : _root.sliderBkgndColor - diameter : 26 - hasBorder : false - handleBorderColor : Colors.highlightProgressBar - - onReleased : vAdjustmentAlarmVolume.doAdjustment( _volumeSlider.value ) - - Connections { target: vAdjustmentAlarmVolume - function onAdjustmentTriggered ( vValue ) { - if ( vAdjustmentAlarmVolume.adjustment_Accepted ) { - vSettings .alarmVolume = vAdjustmentAlarmVolume.hdAlarmVolume - } - else { - // TODO do something with rejection message - print("**** Volume Rejected Reason: " + vAdjustmentAlarmVolume.adjustment_ReasonText) - } - - // regardless of the rejection or acceptance the value will be sent from C++ to be adjusted. - _volumeSlider.reset ( vAdjustmentAlarmVolume.hdAlarmVolume ) - } - } + else { + // TODO do something with rejection message + print("**** Volume Rejected Reason: " + vAdjustmentAlarmVolume.adjustment_ReasonText) } } } + + Connections { target: vDevice + // TODO do something with rejection message + function onStatusChanged ( vValue ) { print("**** Brightness Status: " + vValue) } + } } Fisheye: Tag bea36be2766046e63c4e82539a630b5cee7ce1c6 refers to a dead (removed) revision in file `sources/gui/qml/dialogs/headerbar/HeaderbarStorage.qml'. Fisheye: No comparison available. Pass `N' to diff? Index: sources/gui/qml/globals/Colors.qml =================================================================== diff -u -r232dc65ad1d642f750547db6c480da534704a2c4 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision 232dc65ad1d642f750547db6c480da534704a2c4) +++ sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -37,7 +37,7 @@ readonly property color backgroundButtonNormal : transparent readonly property color backgroundButtonSelect : "#438FEB" readonly property color backgroundButtonSelectDark : "#135088" // "#214773" - readonly property color backgroundDialog : "#254670" + readonly property color backgroundDialog : "#1B3F66" readonly property color backgroundMenu : "#14314C" readonly property color backgroundMainMenu : "#0F2841" //// ----- @LEAHIZED readonly property color backgroundDottedMenu : "#64809D" @@ -58,8 +58,8 @@ readonly property color dialogText : "#343434" readonly property color alarmDialogText : "#343434" readonly property color alarmDialogGreyText : "#838080" - readonly property color dialogShadowColor : "#334E759C" - readonly property color dialogValueColor : "#3D8EEF" + readonly property color dialogShadowColor : "#EAE9E9" + readonly property color dialogValueColor : "#385E92" readonly property color darkDialogColor : "#091E31" readonly property color backgroundRangeRect : "#3e546e" Index: sources/gui/qml/main.qml =================================================================== diff -u -rc9764bd0ad823c5c1725d7c7f556290c2c459d4d -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/main.qml (.../main.qml) (revision c9764bd0ad823c5c1725d7c7f556290c2c459d4d) +++ sources/gui/qml/main.qml (.../main.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -378,7 +378,6 @@ AcidConcentrateAdjustment { id: _acidConcentrateAdjustment } HeaderbarPrescription { id: _headerbarPrescription } HeaderbarWiFi { id: _headerbarWifi } - HeaderbarStorage { id: _headerbarStorage } HeaderbarSettings { id: _headerbarSettings } HeaderbarInformation { id: _headerbarInformation } TreatmentAdjustmentVitals { id: _treatmentAdjustmentVitals } Index: sources/gui/qml/pages/pretreatment/create/PreTreatmentCreateContent.qml =================================================================== diff -u -r0dfba44fb7172b9458d161b3ed5f54527f93b698 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/pages/pretreatment/create/PreTreatmentCreateContent.qml (.../PreTreatmentCreateContent.qml) (revision 0dfba44fb7172b9458d161b3ed5f54527f93b698) +++ sources/gui/qml/pages/pretreatment/create/PreTreatmentCreateContent.qml (.../PreTreatmentCreateContent.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -67,6 +67,7 @@ _heparinStopTimeControl .refresh() _dialysateTemperatureControl .refresh() _salineBolusVolumeControl .refresh() + _bpMeasurementIntervalControl .refresh() } function clear () { @@ -437,28 +438,23 @@ unitText : Variables.unitTextDuration valid : ! vTreatmentCreate.bloodPressureMeasureIntervalRejectReason - contentItem : BaseComboBox { id: _bpMeasurementIntervalControl - anchors.rightMargin : Variables.defaultMargin * 2 - anchors.leftMargin : anchors.rightMargin - anchors.topMargin : Variables.defaultMargin / 2 - anchors.bottomMargin: anchors.topMargin - isActive : vTreatmentCreate.bloodPressureMeasureIntervalSet - enabled : _root.editingEnabled - currentIndex : vTreatmentRanges.bloodPressureMeasureInterval.indexOf(vTreatmentCreate.bloodPressureMeasureInterval.toString()) - model : vTreatmentRanges.bloodPressureMeasureInterval - canOff : true - centerHorizontally : true + contentItem : ValueAdjusterCustom { id: _bpMeasurementIntervalControl + editable : _root.editingEnabled + isActive : vTreatmentCreate.bloodPressureMeasureIntervalSet + defaultValue : vTreatmentRanges.vitalsInterval + value : vTreatmentRanges.bloodPressureMeasureInterval.indexOf(vTreatmentCreate.bloodPressureMeasureInterval.toString()) + model : vTreatmentRanges.bloodPressureMeasureInterval + canOff : true - onClear : { - vTreatmentCreate.bloodPressureMeasureIntervalSet = false - } + onDidActiveChange: function(vState) { vTreatmentCreate.bloodPressureMeasureIntervalSet = vState } - onActivated : { + onDidChange : function(vValue) { if ( ! _bpMeasurementInterval.valid ) { vTreatmentCreate.bloodPressureMeasureIntervalRejectReason = Variables.noRejectReason } - vTreatmentCreate.bloodPressureMeasureInterval = vTreatmentRanges.bloodPressureMeasureInterval[_bpMeasurementIntervalControl.currentIndex] - vTreatmentCreate.bloodPressureMeasureIntervalSet = true + + vTreatmentCreate.bloodPressureMeasureInterval = vTreatmentRanges.bloodPressureMeasureInterval[vValue] + vTreatmentCreate.bloodPressureMeasureIntervalSet = true } } } Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentBolusVolume.qml =================================================================== diff -u -r601289deb20f7059b3af5bb19e16f53974262ceb -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentBolusVolume.qml (.../TreatmentAdjustmentBolusVolume.qml) (revision 601289deb20f7059b3af5bb19e16f53974262ceb) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentBolusVolume.qml (.../TreatmentAdjustmentBolusVolume.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -32,7 +32,9 @@ readonly property alias fluidBolusVolume: _fluidBolusVolume.value - titleText: qsTr("Fluid Delivery Settings") + titleText : qsTr("Fluid Delivery Settings") + height : Variables.smallDialogHeight + width : Variables.smallDialogWidth onAboutToShow: { _fluidBolusVolume.value = vTreatmentSaline.target Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentPressuresLimits.qml =================================================================== diff -u -rc9764bd0ad823c5c1725d7c7f556290c2c459d4d -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentPressuresLimits.qml (.../TreatmentAdjustmentPressuresLimits.qml) (revision c9764bd0ad823c5c1725d7c7f556290c2c459d4d) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentPressuresLimits.qml (.../TreatmentAdjustmentPressuresLimits.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -36,6 +36,8 @@ readonly property alias tmpLimitWindow : _tmpWindow.value titleText: qsTr("Pressure Window Limit Settings") + height : Variables.smallDialogHeight + width : Variables.smallDialogWidth onAboutToShow: { _arterialWindow.value = vTreatmentPressureOcclusion.arterialPressure Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationEdit.qml =================================================================== diff -u -r71bb1dea18ee4340d90d894a7ab8e147b5977bb4 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationEdit.qml (.../TreatmentAdjustmentUltrafiltrationEdit.qml) (revision 71bb1dea18ee4340d90d894a7ab8e147b5977bb4) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationEdit.qml (.../TreatmentAdjustmentUltrafiltrationEdit.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -128,7 +128,6 @@ z : _removedFill.z + 1 width : Variables.ultrafiltrationRangeMarkerWidth height : Variables.rangeMarkerHeight - hasHandle : false valueOnTop : true decimal : Variables.ultrafiltrationPrecision value : Math.max(_private.volumeRemoved, _private.minimum) Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationStart.qml =================================================================== diff -u -rca05e940ea4a0c567acb05c4c8777dea079b0f08 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationStart.qml (.../TreatmentAdjustmentUltrafiltrationStart.qml) (revision ca05e940ea4a0c567acb05c4c8777dea079b0f08) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationStart.qml (.../TreatmentAdjustmentUltrafiltrationStart.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -96,7 +96,6 @@ } marker { width : Variables.ultrafiltrationRangeMarkerWidth - hasHandle : false valueOnTop : true text { anchors.bottomMargin: Variables.ultrafiltrationRangeMarkerTextMargin Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitals.qml =================================================================== diff -u -r77e7c1e746bba703ab3aee61f8e19f398fd9ac00 -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitals.qml (.../TreatmentAdjustmentVitals.qml) (revision 77e7c1e746bba703ab3aee61f8e19f398fd9ac00) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitals.qml (.../TreatmentAdjustmentVitals.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -29,6 +29,8 @@ width : Variables.smallDialogWidth x : numPad.isOpened ? Math.round((Variables.applicationWidth - width) / 2) - 200 : Math.round((Variables.applicationWidth - width) / 2) + y : Math.round((Variables.applicationHeight - height) / 2) + notification.textfontSize : 20 notification.visible : vTreatmentVitals.lastRead || vTreatmentAdjustmentVitals.adjustment_ReasonText notification.anchors.rightMargin: numPad.isOpened ? 10 : 0 // fix margins when numpad is open and notifiction is displayed Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitalsInterval.qml =================================================================== diff -u -rb12853c86ef9e517667516dc3e47bca07349cedf -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitalsInterval.qml (.../TreatmentAdjustmentVitalsInterval.qml) (revision b12853c86ef9e517667516dc3e47bca07349cedf) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitalsInterval.qml (.../TreatmentAdjustmentVitalsInterval.qml) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -26,11 +26,11 @@ titleText : qsTr("Vitals Interval") titlePixelSize : Fonts.fontPixelSection - height : 500 - width : 1000 + height : Variables.smallDialogHeight + width : Variables.smallDialogWidth function confirm() { - vTreatmentCreate.bloodPressureMeasureInterval = vTreatmentRanges.bloodPressureMeasureInterval[_bpMeasurementIntervalControl.currentIndex] + vTreatmentCreate.bloodPressureMeasureInterval = vTreatmentRanges.bloodPressureMeasureInterval[_bpMeasurementIntervalControl.currentIndex] vTreatmentVitals.doTimerStart() _root.close() } @@ -39,8 +39,8 @@ LabelUnitContainer { id: _bpMeasurementInterval anchors { - top : _root.contentItem.top - topMargin : Variables.defaultMargin * 2 + verticalCenter : _root.contentItem.verticalCenter + verticalCenterOffset: Variables.defaultMargin * -3 // better align label with dialog height horizontalCenter: _root.contentItem.horizontalCenter } @@ -50,22 +50,16 @@ width : Variables.adjustmentLabelUnitContainerWidth height : Variables.adjustmentLabelUnitContainerHeight - contentItem : BaseComboBox { id: _bpMeasurementIntervalControl - anchors.rightMargin : Variables.defaultMargin * 2 - anchors.leftMargin : anchors.rightMargin - anchors.topMargin : Variables.defaultMargin / 2 - anchors.bottomMargin: anchors.topMargin + contentItem : ValueAdjusterCustom { id: _bpMeasurementIntervalControl isActive : vTreatmentCreate.bloodPressureMeasureIntervalSet - currentIndex : vTreatmentRanges.bloodPressureMeasureInterval.indexOf(vTreatmentCreate.bloodPressureMeasureInterval.toString()) + value : vTreatmentRanges.bloodPressureMeasureInterval.indexOf(vTreatmentCreate.bloodPressureMeasureInterval.toString()) model : vTreatmentRanges.bloodPressureMeasureInterval + defaultValue : vTreatmentRanges.vitalsInterval canOff : true - centerHorizontally : true - onClear : { - vTreatmentCreate.bloodPressureMeasureIntervalSet = false - } + onDidActiveChange: function(vState) { vTreatmentCreate.bloodPressureMeasureIntervalSet = vState } - onActivated : { + onDidChange : function(vValue) { if ( ! _bpMeasurementInterval.valid ) { vTreatmentCreate.bloodPressureMeasureIntervalRejectReason = Variables.noRejectReason } Index: sources/view/hd/data/VTreatmentRanges.cpp =================================================================== diff -u -rc9764bd0ad823c5c1725d7c7f556290c2c459d4d -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/view/hd/data/VTreatmentRanges.cpp (.../VTreatmentRanges.cpp) (revision c9764bd0ad823c5c1725d7c7f556290c2c459d4d) +++ sources/view/hd/data/VTreatmentRanges.cpp (.../VTreatmentRanges.cpp) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -66,7 +66,7 @@ heparinDispensingRateMax ( vData.mHepDispRateMax ); heparinDispensingRateDef ( vData.mHepDispRateDef ); heparinStopTimeMin ( vData.mHepStopTimeMin ); - + vitalsInterval ( vData.mVitalsIntervalDef ); acidConcentratePotassiumMin ( vData.mPotassiumMin ); acidConcentratePotassiumMax ( vData.mPotassiumMax ); acidConcentrateCalciumMin ( vData.mCalciumMin ); @@ -229,6 +229,8 @@ isConfigsOk = isConfigsOk && !_dryBicabCartridgeSizeOptions .isEmpty(); isConfigsOk = isConfigsOk && !_waterSampleTestResultRequired.isEmpty(); + vitalsInterval(_bloodPressureMeasureInterval.indexOf("30")); + FROMVARIANT_WITHRETURN ( dialysateTempDef , "Dialysate Temperature" , "Dialysate_Temperature_Def" , Float , isConfigsOk ); FROMVARIANT_WITHRETURN ( dialysateTempMin , "Dialysate Temperature" , "Dialysate_Temperature_Min" , Float , isConfigsOk ); FROMVARIANT_WITHRETURN ( dialysateTempMax , "Dialysate Temperature" , "Dialysate_Temperature_Max" , Float , isConfigsOk ); Index: sources/view/hd/data/VTreatmentRanges.h =================================================================== diff -u -rc9764bd0ad823c5c1725d7c7f556290c2c459d4d -rbea36be2766046e63c4e82539a630b5cee7ce1c6 --- sources/view/hd/data/VTreatmentRanges.h (.../VTreatmentRanges.h) (revision c9764bd0ad823c5c1725d7c7f556290c2c459d4d) +++ sources/view/hd/data/VTreatmentRanges.h (.../VTreatmentRanges.h) (revision bea36be2766046e63c4e82539a630b5cee7ce1c6) @@ -63,6 +63,8 @@ READONLY( QStringList , bicarbonateConcentrateOptions ,{}) READONLY( QStringList , dialyzerTypeOptions ,{}) READONLY( QStringList , bloodPressureMeasureInterval ,{}) + VALUESET( quint32 , vitalsInterval , 0) + RANGESET( float , dialysateTemp , 0) RANGESET( quint32 , salineBolusVolume , 0)