Commit a5e3137a authored by Karol Hennessy's avatar Karol Hennessy

adding hev-display

parent 459c7229
*.png binary
* text=auto
# C++ objects and libs
*.slo
*.lo
*.o
*.a
*.la
*.lai
*.so
*.so.*
*.dll
*.dylib
# Qt-es
object_script.*.Release
object_script.*.Debug
*_plugin_import.cpp
/.qmake.cache
/.qmake.stash
*.pro.user
*.pro.user.*
*.qbs.user
*.qbs.user.*
*.moc
moc_*.cpp
moc_*.h
qrc_*.cpp
ui_*.h
*.qmlc
*.jsc
Makefile*
*build-*
*.qm
*.prl
# Qt unit tests
target_wrapper.*
# QtCreator
*.autosave
# QtCreator Qml
*.qmlproject.user
*.qmlproject.user.*
# QtCreator CMake
CMakeLists.txt.user*
# QtCreator local machine specific files for imported projects
*creator.user*
*_qmlcache.qrc
CPackConfig.cmake
# cmake build files
*.cmake
CMakeLists.txt
*_qm_files.qrc
CMakeFiles
CMakeCache.txt
hev-display
hev-display_autogen
include:
- project: etalian/theca
file: /gitlab-ci-include.yml
stages:
- build
- trigger
build:raspi4-qmake:
stage: build
image: etalian/qt-raspi4
script:
- /raspi/qt5/bin/qmake
- make
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}~git${CI_COMMIT_SHORT_SHA}"
paths:
- hev-display
build:raspi4-cmake:
stage: build
image: etalian/qt-raspi4
before_script:
- mkdir -p "${CI_PROJECT_DIR}/binaries"
script:
- mkdir /tmp/${CI_PROJECT_NAME} && cd "$_"
- cmake --config Release
-DCMAKE_TOOLCHAIN_FILE=/raspi/gcc-linaro-arm-linux-gnueabihf-raspbian-x64.cmake
-DCPACK_PACKAGE_SUFFIX=-pi4 -DCPACK_SYSTEM_NAME=raspbian10 -DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=armhf
"${CI_PROJECT_DIR}"
- make
- cpack -G DEB && cp -v *.deb "${CI_PROJECT_DIR}/binaries"
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}~git${CI_COMMIT_SHORT_SHA}"
paths:
- binaries/
build:raspi1-qmake:
stage: build
image: etalian/qt-raspi1
script:
- /raspi/qt5/bin/qmake
- make
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}~git${CI_COMMIT_SHORT_SHA}"
paths:
- hev-display
build:raspi1-cmake:
stage: build
image: etalian/qt-raspi1
before_script:
- mkdir -p "${CI_PROJECT_DIR}/binaries"
script:
- mkdir /tmp/${CI_PROJECT_NAME} && cd "$_"
- cmake --config Release
-DCMAKE_TOOLCHAIN_FILE=/raspi/gcc-linaro-arm-linux-gnueabihf-raspbian-x64.cmake
-DCPACK_PACKAGE_SUFFIX=-pi1 -DCPACK_SYSTEM_NAME=raspbian10 -DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=armhf
"${CI_PROJECT_DIR}"
- make
- cpack -G DEB && cp -v *.deb "${CI_PROJECT_DIR}/binaries"
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}~git${CI_COMMIT_SHORT_SHA}"
paths:
- binaries/
trigger:downstream:
stage: trigger
only:
- wip
dependencies: []
extends: .theca-trigger-downstream
This diff is collapsed.
# HEV display software
## Impoving performance
The interface should be responsive regardless of the incoming data rate provided.
If this isn't the case, one of the following actions should fix the issue:
* Enable OpenGL by starting with `hev-display --opengl`
* Ensure the screen resolution is appropriate, 1080p or 720p should both be fine
* Increase the fraction of memory allocated to th GPU in `sudo raspi-config` > `Advanced Options` > `Memory Split`
## Building directly on a Rasberry pi
These instructions have been tested on the Rasberry Pi 3B+ and Rasberry Pi 4.
### Install dependencies (these might not all be needed as Qt is already built)
```bash
sudo apt-get install cmake libglvnd-dev build-essential libfontconfig1-dev libdbus-1-dev libfreetype6-dev libicu-dev libinput-dev libxkbcommon-dev libsqlite3-dev libssl-dev libpng-dev libjpeg-dev libglib2.0-dev libraspberrypi-dev
```
# Download prebuilt Qt 5.12 binaries
```bash
curl -L https://chrisburr.me/hev/opt-Qt5.12.tar.gz > ~/Downloads/opt-Qt5.12.tar.gz
sudo mkdir -p /opt/Qt5.12
cd /opt/Qt5.12
sudo tar xvf ~/Downloads/opt-Qt5.12.tar.gz
```
# Clone the sources
```bash
mkdir -p ~/
cd ~/
git clone git@gitlab.com:hev-sw/hev-display.git
cd hev-display
```
# Build the sources with CMake
```bash
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install -DCMAKE_PREFIX_PATH=/opt/Qt5.12/lib/cmake ..
make VERBOSE=1 install -j4
```
# Run the display
```bash
LD_LIBRARY_PATH=/opt/Qt5.12/lib QML2_IMPORT_PATH=/opt/Qt5.12/qml QML_IMPORT_PATH=/opt/Qt5.12/qml /home/pi/Development/hev-display/install/bin/hev-display --opengl
```
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
Label {
id: item
Layout.fillHeight: true
Layout.fillWidth: true
Layout.maximumHeight: Style.btnHeight / 3 * 2
font.family: Style.fontFamily
//font.weight: Font.Bold
font.pixelSize: Style.titleSize
horizontalAlignment: Qt.AlignHCenter
verticalAlignment: Qt.AlignVCenter
property bool active: true
property bool spin : true
property string inactiveColor: "white"
property string activeColor: "black"
property color numColor: active ? activeColor : inactiveColor
property color bkgColor: active ? "white": Style.mainBgColor
property var bkgRadius:0
property bool modified : false
property var readback
property var inputMethodHints: Qt.ImhFormattedNumbersOnly
property var validator: RegExpValidator { regExp: /\-?[0-9]+\.?[0-9]*/ }
text: "0"
color: numColor
background: Rectangle {
implicitWidth: parent.width
color: bkgColor
radius: bkgRadius
}
Button {
id: up
text: "+"
font.pixelSize: Style.titleSize
visible: active && spin
anchors.right: parent.right
anchors.top : parent.top
height: parent.height/2
width: parent.width/5
contentItem: Text {
text: up.text
font: up.font
color: numColor
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
background: Rectangle {
anchors.fill: parent
color: "transparent"
}
onClicked: {
try { item.text = Number(item.text) + 1 } catch (error) { }
}
}
Button {
id: down
text: "\u2212"
font.pixelSize: Style.titleSize
visible: active && spin
anchors.right : parent.right
anchors.bottom: parent.bottom
height: parent.height/2
width: parent.width/5
contentItem: Text {
text: down.text
font: down.font
color: numColor
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
background: Rectangle {
anchors.fill: parent
color: "transparent"
}
onClicked: {
try { item.text = Number(item.text) - 1 } catch (error) { }
}
}
MouseArea {
anchors.left : parent.left
anchors.top : parent.top
anchors.bottom: parent.bottom
anchors.right : (active && spin) ? up.left : parent.right
onReleased: {
if (active) askInputDigits(item, text)
}
}
function swapColor() {
numColor = active ? activeColor : inactiveColor
}
onActiveChanged: {
if (!modified) swapColor()
}
onTextChanged: {
modified = !(Number(text)===Number(readback))
}
onReadbackChanged: {
try { text = readback; modified = false } catch (error) { }
}
onModifiedChanged: {
if (modified) {
numColor = "red"
}
else {
text = readback
swapColor()
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import QtGraphicalEffects 1.0
GridLayout {
property var callback: function(result) {
console.log("No confirmation callback set")
}
property bool modified: false
rowSpacing: 10
columnSpacing: 10
columns: 2
RoundButton {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.minimumWidth: Style.btnHeight * 1.5
Layout.minimumHeight: Style.btnHeight / 2
Layout.maximumHeight: Style.btnHeight
radius: Style.btnRadius
// background: Rectangle {
// color: modified ? "green" : Style.btnUpColor
// radius: Style.btnRadius
// }
Image {
anchors.centerIn: parent
source: "svg/check-solid.svg"
sourceSize.height: parent.height
ColorOverlay {
anchors.fill: parent
source: parent
color: modified ? "green" : "black"
}
}
onClicked: callback(true)
}
RoundButton {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.minimumWidth: Style.btnHeight * 1.5
Layout.minimumHeight: Style.btnHeight / 2
Layout.maximumHeight: Style.btnHeight
radius: Style.btnRadius
// background: Rectangle {
// color: modified ? "red" : Style.btnUpColor
// radius: Style.btnRadius
// }
Image {
anchors.centerIn: parent
source: "svg/times-solid.svg"
sourceSize.height: parent.height
ColorOverlay {
anchors.fill: parent
source: parent
color: modified ? "red" : "black"
}
}
onClicked: callback(false)
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
Item {
id: ctrl
property alias title : label_name
property alias value : field_value_left
property alias value_right: field_value_right
property alias unit : label_unit
property bool active : true
property var radioGroup: ""
onRadioGroupChanged: {
radio.ButtonGroup.group = radioGroup
}
Layout.fillWidth: true
Layout.fillHeight: true
Layout.margins: 0
property string type : ""
property string type_right: ""
property string code: ""
property var tmp_value
RowLayout {
Layout.margins: 0
spacing: 5
anchors.fill: parent
RadioButton {
id: radio
Layout.fillHeight: true
visible: radioGroup === "" ? false : true
checked: active
}
Label {
id: label_name
Layout.fillHeight: true
Layout.fillWidth: true
color: Style.fontColor
horizontalAlignment: Qt.AlignRight
verticalAlignment: Qt.AlignVCenter
Layout.minimumWidth: 150
Layout.preferredWidth: radio.visible ? parent.width/2 - radio.width - parent.spacing : parent.width/2
font.family: Style.fontFamily
font.pixelSize: Style.titleSize
text: ""
MouseArea {
anchors.fill: parent
onClicked: {
radio.checked = radio.visible
}
}
}
Cell {
id : field_value_left
active: (!radio.visible || radio.checked) && ctrl.active
Layout.minimumWidth: 50
Layout.preferredWidth: 200
}
Cell {
id : field_value_right
active: (!radio.visible || radio.checked) && ctrl.active
Layout.minimumWidth: 50
Layout.preferredWidth: 200
}
Label {
id: label_unit
Layout.fillHeight: true
Layout.fillWidth: true
color: Style.fontColor
verticalAlignment: Qt.AlignVCenter
Layout.minimumWidth: 50
Layout.preferredWidth: parent.width/10
font.family: Style.fontFamily
font.pixelSize: Style.titleSize
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
property var messages
property var callback: function() {
console.log("No confirmation callback set")
}
function initialize(messages, callback) {
this.messages = messages
confirmation.callback = callback
}
ColumnLayout {
anchors.fill: parent
Repeater {
model: messages.length
Text {
text: messages[index]
color: "white"
Layout.fillWidth: true
Layout.fillHeight: true
verticalAlignment: Text.AlignVCenter
font.family: Style.fontFamily
font.weight: Font.Bold
font.pixelSize: Style.titleSize
}
}
Confirmation {
Layout.fillHeight: true
Layout.fillWidth: true
id: confirmation
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import QtQuick.VirtualKeyboard 2.1
import QtQuick.VirtualKeyboard.Settings 2.1
Dialog {
property alias field: text_field
function initialize(item, value) {
text_field.text = value
dialog.sourceField = item
text_field.selectAll()
text_field.inputMethodHints = item.inputMethodHints
text_field.validator = item.validator
}
function returnInput(result) {
if (result) {
if (text_field.acceptableInput) {
dialog.sourceField.text = text_field.text
} else {
text_field.focus = true
return
}
}
dialog.close()
}
property Item sourceField
modal: true
focus: true
visible: false
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
anchors.centerIn: Overlay.overlay
background: Rectangle {
color: Style.altBgColor
radius: Style.btnRadius
}
ColumnLayout {
anchors.fill: parent
TextField {
id: text_field
Layout.fillHeight: true
Layout.fillWidth: true
Layout.preferredWidth: applicationWindow.width/2
Layout.preferredHeight: Style.btnHeight
focus: true
horizontalAlignment: Text.AlignHCenter
placeholderText: "Fill value"
overwriteMode: true
font.family: Style.fontFamily
font.weight: Font.Bold
font.pixelSize: Style.btnPixelSize
}
InputPanel {
id: inputPanel
Layout.fillHeight: true
Layout.fillWidth: true
Layout.preferredWidth: applicationWindow.width/2
}
Confirmation {
callback: dialog.returnInput
Layout.fillWidth: true
Layout.fillHeight: true
Layout.preferredHeight: Style.btnHeight/2
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
// Should rather be a map than a list, but a map is not a valid ListModel
property variant langs: [
// Setting name, Display name
["en", "English"],
["fr", "Français"],
["de", "Deutsch"],
["es", "Español"],
["it", "Italiano"],
["sk", "Slovenský"],
["lv", "Latviešu"]
]
property string lang_value: descr2lang("")
property string lang_descr: lang2descr("")
function initialize() {
lang_value = localization.language
lang_descr = lang2descr(localization.language)
}
function lang2descr(lang) {
for (var i = 0; i < langs.length; ++i) {
if (langs[i][0] === lang) return langs[i][1]
}
return "Unknown"
}
function descr2lang(str) {
for (var i = 0; i < langs.length; ++i) {
if (langs[i][1] === str) return langs[i][0]
}
return "UNKNOWN"
}
ColumnLayout {
spacing: 20
Repeater {
model: langs
RadioButton {
Layout.fillWidth: true
height: Style.btnHeight
text: model.modelData[1]
checked: lang_value === model.modelData[0]
contentItem: Text {
text: parent.text
color: "white"
leftPadding: parent.indicator.width + parent.spacing
verticalAlignment: Text.AlignVCenter
font.family: Style.fontFamily
font.weight: Font.Bold
font.pixelSize: Style.tab1Size
}
onCheckedChanged: {
if (checked) {
lang_descr = text
lang_value = descr2lang(text)
}
}
}
}
RowLayout {
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
Layout.topMargin: 10
spacing: 10
RoundButton {
Layout.fillWidth: true
Layout.minimumWidth: Style.btnHeight * 1.5
Layout.minimumHeight: Style.btnHeight
Image {
anchors.centerIn: parent
source: "svg/check-solid.svg"
sourceSize.height: parent.height * 0.8
}
onClicked: {
localization.language = lang_value
returnInputLanguage()
}
}
RoundButton {
Layout.fillWidth: true
Layout.minimumWidth: Style.btnHeight * 1.5
Layout.minimumHeight: Style.btnHeight
Image {
anchors.centerIn: parent
source: "svg/times-solid.svg"
sourceSize.height: parent.height * 0.8
}
onClicked: {
returnInputLanguage()
}
}
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
property string modeValue : "CURRENT"
property string modeCurrent : "CURRENT"
function initialize(value) {
modeCurrent = value
modeValue = value
dataSource.sendCommand("GET_TARGETS", modeValue, 0)
for (var radio in radios.children) {
if (radios.children[radio].code === value) {
radios.children[radio].checked = true
}
}
}
function acknowledge(result) {
returnInputMode(result, modeValue)
confirmation.modified = false
}
ButtonGroup {
id: group
buttons: radios.children
onClicked: {
if (button.code === modeCurrent) {
confirmation.modified = false
button.textColor = "white"
} else {
confirmation.modified = true
button.textColor = "red"
}
modeValue = button.code
dataSource.sendCommand("GET_TARGETS", modeValue, 0)
}
}
ColumnLayout {
anchors.fill: parent
RowLayout {
Layout.fillHeight: true
Layout.fillWidth: true
ColumnLayout {
id: radios
Layout.fillHeight: true
Layout.fillWidth: true
Radio_Ctrl {
code: "PC_AC"
text: PayloadDictionary.breathingModes[code]
textColor: "white"
}
Radio_Ctrl {
code: "PC_AC_PRVC"
text: PayloadDictionary.breathingModes[code]
textColor: "white"
}
Radio_Ctrl {
code: "PC_PSV"
text: PayloadDictionary.breathingModes[code]
textColor: "white"
}
Radio_Ctrl {
code: "CPAP"
text: PayloadDictionary.breathingModes[code]
textColor: "white"
}
// Radio_Ctrl {
// code: "TEST"
// text: PayloadDictionary.breathingModes[code]
// textColor: "white"
// }
}
GridLayout {
Layout.fillHeight: true
Layout.fillWidth: true
columns: 3
columnSpacing: 10
Label {
Layout.fillHeight: true;
Layout.fillWidth: true;
Layout.column: 1;
Layout.row: 0;
horizontalAlignment: Qt.AlignRight
verticalAlignment: Qt.AlignVCenter
text: qsTr("Current")
color: "white"
font.family: Style.fontFamily
font.pixelSize: Style.h1Size
}
Label {
Layout.fillHeight: true;
Layout.fillWidth: true;
Layout.column: 2;
Layout.row: 0;
horizontalAlignment: Qt.AlignRight
verticalAlignment: Qt.AlignVCenter
text: qsTr("New")
color: "white"
font.family: Style.fontFamily
font.pixelSize: Style.h1Size
}
Repeater {
model: ["RESPIRATORY_RATE", "INHALE_TIME", "IE_RATIO", "INHALE_TRIGGER_THRESHOLD", "EXHALE_TRIGGER_THRESHOLD", "INSPIRATORY_PRESSURE", "VOLUME", "FIO2_PERCENT"]
Label {
Layout.fillHeight: true;
Layout.fillWidth: true;
Layout.column: 0;
Layout.row: index + 1;
horizontalAlignment: Qt.AlignRight
verticalAlignment: Qt.AlignVCenter
text: PayloadDictionary.commandCodes[modelData]
color: "white"
font.family: Style.fontFamily
font.pixelSize: Style.h1Size
}
}
Repeater {
id: current
model: ["respiratory_rate", "inhale_time", "ie_ratio", "inhale_trigger_threshold", "exhale_trigger_threshold", "inspiratory_pressure", "volume", "fiO2_percent"]
Label {
Layout.fillHeight: true;
Layout.fillWidth: true;
Layout.column: 1;
Layout.row: index + 1;
horizontalAlignment: Qt.AlignRight
verticalAlignment: Qt.AlignVCenter
text: target_CURRENT[modelData].toFixed(2)
color: "white"
font.family: Style.fontFamily
font.pixelSize: Style.h1Size
}
}
Repeater {
id: set
model: ["respiratory_rate", "inhale_time", "ie_ratio", "inhale_trigger_threshold", "exhale_trigger_threshold", "inspiratory_pressure", "volume", "fiO2_percent"]
Label {
Layout.fillHeight: true;
Layout.fillWidth: true;
Layout.column: 2;
Layout.row: index + 1;
horizontalAlignment: Qt.AlignRight
verticalAlignment: Qt.AlignVCenter
text: targets[modeValue][modelData].toFixed(2)
color: targets[modeValue][modelData].toFixed(2) === target_CURRENT[modelData].toFixed(2) ? "white" : "red"
font.family: Style.fontFamily
font.pixelSize: Style.h1Size
}
}
}
}
Confirmation {
id: confirmation
Layout.fillWidth: true
callback: acknowledge
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
MouseArea {
onPressed: {
lockSign.x = mouseX - lockSign.width / 2
lockSign.y = mouseY - lockSign.height / 2
lockSign.visible = true
}
onReleased: lockSign.visible = false
RoundButton {
id: lockSign
width: parent.width * 0.1
height: parent.width * 0.1
visible: false
radius: Style.btnRadius
Image {
anchors.centerIn: parent
source: "svg/lock-solid.svg"
sourceSize.width: parent.height * 0.8
sourceSize.height: parent.height * 0.8
ColorOverlay {
anchors.fill: parent
source: parent
color: "white"
}
}
background: Rectangle {
color: Style.btnDnColor
radius: Style.btnRadius
opacity: 0.5
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
Item {
id: mainctrl
property string type: ""
property string code: ""
property alias title: titleText
property alias value: currentValue
Layout.fillHeight: true
Layout.fillWidth: true
Rectangle {
id: bgrect
color: value.active ? "transparent" : Style.highlightColor
border.color: value.active ? "white" : "white"
width: parent.width
height: parent.height
radius: 10
anchors.fill: parent
}
Rectangle {
anchors.top: parent.top
id: currentValueRect
color: "#3b3b3b"
border.color: "white"
width: parent.width
height: parent.height / 3
radius: 10
Text {
id: titleText
anchors.fill: parent
font.family: Style.fontFamily
font.pixelSize: Style.h2Size
color: "white"
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
width: parent.width
}
}
Cell {
id: currentValue
anchors.top: currentValueRect.bottom
anchors.bottom: parent.bottom
width: currentValueRect.width
bkgColor: "transparent"
bkgRadius: currentValueRect.radius
font.pixelSize: Style.mainValueSize
activeColor: Style.highlightColor
inactiveColor: "black"
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
Settings_Ctrl {
Layout.fillHeight: true
Layout.fillWidth: true
//Layout.preferredWidth: 900
//Layout.alignment: Qt.AlignCenter
titleVisible: false
entries: layout
property string mode: ""
property string command_type: "SET_TARGET_" + mode
ColumnLayout {
id: layout
anchors.fill: parent
ButtonGroup { id: inhaleGroup }
Single_Ctrl {
type: command_type
code: "RESPIRATORY_RATE"
title.text: PayloadDictionary.commandCodes[code]
unit.text: "/min"
value.readback: targets[mode]["respiratory_rate"].toFixed(1)
}
Single_Ctrl {
type: command_type
code: "INHALE_TIME"
title.text: PayloadDictionary.commandCodes[code]
unit.text: "s"
value.readback: targets[mode]["inhale_time"].toFixed(1)
radioGroup: inhaleGroup
}
Single_Ctrl {
type: command_type
code: "IE_RATIO"
title.text: PayloadDictionary.commandCodes[code]
value.readback: targets[mode]["ie_ratio"].toFixed(2)
radioGroup: inhaleGroup
}
Single_Ctrl {
type: command_type
code: "INHALE_TRIGGER_THRESHOLD"
title.text: PayloadDictionary.commandCodes[code]
value.readback: targets[mode]["inhale_trigger_threshold"].toFixed(1)
unit.text: "L/min"
}
Single_Ctrl {
type: command_type
code: "EXHALE_TRIGGER_THRESHOLD"
title.text: PayloadDictionary.commandCodes[code]
value.readback: targets[mode]["exhale_trigger_threshold"].toFixed(1)
unit.text: "%"
value.active : mode === "PC_PSV" ? true : false;
value.color : mode === "PC_PSV" ? Style.fontAltColor : Style.disabledColor;
title.color : mode === "PC_PSV" ? Style.fontColor : Style.disabledColor;
unit.color : mode === "PC_PSV" ? Style.fontColor : Style.disabledColor;
}
Single_Ctrl {
type: command_type
code: "INSPIRATORY_PRESSURE"
title.text: PayloadDictionary.commandCodes[code]
unit.text: "mBar"
value.readback: targets[mode]["inspiratory_pressure"].toFixed(1)
}
Single_Ctrl {
type: command_type
code: "VOLUME"
title.text: PayloadDictionary.commandCodes[code]
unit.text: "L"
value.readback: targets[mode]["volume"].toFixed(0)
value.active : mode === "PC_AC_PRVC" ? true : false;
value.color : mode === "PC_AC_PRVC" ? Style.fontAltColor : Style.disabledColor;
title.color : mode === "PC_AC_PRVC" ? Style.fontColor : Style.disabledColor;
unit.color : mode === "PC_AC_PRVC" ? Style.fontColor : Style.disabledColor;
}
Single_Ctrl {
type: command_type
code: "FIO2_PERCENT"
title.text: PayloadDictionary.commandCodes[code]
unit.text: "%"
value.readback: targets[mode]["fiO2_percent"].toFixed(1)
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtGraphicalEffects 1.0
Item {
property alias text: label.text
property alias color: rect.color
property bool alarm: false
width: parent.width
height: 50
RectangularGlow {
anchors.fill: parent
glowRadius: 10
spread: 0.2
color: "black"
cornerRadius: glowRadius
}
Rectangle {
id: rect
anchors.fill: parent
color: "white"
}
Image {
id: icon
anchors.left: parent.left
anchors.leftMargin: 10
anchors.verticalCenter: parent.verticalCenter
source: alarm ? "svg/exclamation-triangle-solid.svg" : "svg/exclamation-circle-solid.svg"
sourceSize.width: parent.height * 0.8
sourceSize.height: parent.height * 0.8
}
Text {
id: label
anchors.left: icon.right
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
font.pixelSize: Style.pSize
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
id: page
Rectangle {
color: Style.mainBgColor
anchors.fill: parent
}
ColumnLayout {
anchors.fill: parent
TabBar {
id: bar
Layout.fillWidth: true
TabButton {
text: qsTr("List of Alarms")
font.family: Style.fontFamily
font.pixelSize: Style.tab1Size
}
TabButton {
text: qsTr("Clinical Limits")
font.family: Style.fontFamily
font.pixelSize: Style.tab1Size
}
TabButton {
text: qsTr("Technical Limits")
font.family: Style.fontFamily
font.pixelSize: Style.tab1Size
}
}
StackLayout {
id: settings
Layout.fillWidth: true
Layout.fillHeight: true
currentIndex: bar.currentIndex
Tab_Alarms {
Layout.fillWidth: true
Layout.fillHeight: true
}
Tab_Limits_Clinical {
Layout.fillWidth: true
Layout.fillHeight: true
}
Tab_Limits_Technical {
Layout.fillWidth: true
Layout.fillHeight: true
}
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
id: page
Rectangle {
color: Style.mainBgColor
anchors.fill: parent
}
function callback() {
tabModes.callback()
}
ColumnLayout {
anchors.fill: parent
TabBar {
id: bar
Layout.fillWidth: true
TabButton {
text: qsTr("Expert settings")
font.family: Style.fontFamily
font.pixelSize: Style.tab1Size
}
TabButton {
text: qsTr("Charts")
font.family: Style.fontFamily
font.pixelSize: Style.tab1Size
}
}
StackLayout {
id: modes
Layout.fillWidth: true
Layout.fillHeight: true
currentIndex: bar.currentIndex
Tab_Settings {
Layout.fillWidth: true
Layout.fillHeight: true
}
Tab_Charts {
id: tabCharts
openGL: openGL
}
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
id: page
property bool antialias: true
property bool openGL: false
property int axisTimeMin : -15
Rectangle {
color: Style.mainBgColor
anchors.fill: parent
}
ColumnLayout {
anchors.fill: parent
TabBar {
id: bar
Layout.fillWidth: false
TabButton {
text: qsTr(" Primary ")
font.family: Style.fontFamily
font.pixelSize: Style.tab3Size
}
TabButton {
text: qsTr(" Detailed ")
font.family: Style.fontFamily
font.pixelSize: Style.tab3Size
}
}
StackLayout {
id: modes
Layout.fillWidth: true
Layout.fillHeight: true
currentIndex: bar.currentIndex
Tab_Main_Basic {
id: tabMainBasic
openGL: openGL
Layout.fillWidth: true
Layout.fillHeight: true
}
Tab_Main_Advanced {
id: tabMainAdvanced
openGL: openGL
Layout.fillWidth: true
Layout.fillHeight: true
}
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
id: page
Rectangle {
color: Style.mainBgColor
anchors.fill: parent
}
function callback() {
tabModes.callback()
tabPersonal.callback()
}
ColumnLayout {
anchors.fill: parent
TabBar {
id: bar
Layout.fillWidth: true
TabButton {
text: qsTr("Modes settings")
font.family: Style.fontFamily
font.pixelSize: Style.tab1Size
}
TabButton {
text: qsTr("Personal settings")
font.family: Style.fontFamily
font.pixelSize: Style.tab1Size
}
}
StackLayout {
id: modes
Layout.fillWidth: true
Layout.fillHeight: true
currentIndex: bar.currentIndex
Tab_Modes {
id: tabModes
Layout.fillWidth: true
Layout.fillHeight: true
}
Tab_Personal {
id: tabPersonal
Layout.fillWidth: true
Layout.fillHeight: true
}
}
}
}
This diff is collapsed.
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
RadioButton {
property string code: ""
property string textColor: Style.fontColor
text: model.modelData[1]
Layout.fillWidth: true
height: Style.btnHeight
contentItem: Text {
text: parent.text
color: textColor
leftPadding: parent.indicator.width + parent.spacing
verticalAlignment: Text.AlignVCenter
font.family: Style.fontFamily
font.weight: Font.Bold
font.pixelSize: Style.titleSize
}
onCheckedChanged: {
textColor = "white"
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
// this class only works with contents of type Single_Ctrl
GroupBox {
property bool titleVisible: true
property var entries
function getModified() {
var listOfCommands = []
for (var child in entries.children) {
try {
if (entries.children[child].value.modified) {
if (entries.children[child].type !== "" ) {
listOfCommands.push([entries.children[child].type, entries.children[child].code, entries.children[child].value.text])
}
}
if (entries.children[child].value_right.modified) {
if (entries.children[child].type_right !== "" ) {
listOfCommands.push([entries.children[child].type_right, entries.children[child].code, entries.children[child].value_right.text])
}
}
} catch (error) {
continue
}
}
return listOfCommands
}
function resetModified() {
for (var child in entries.children) {
if (entries.children[child].value.modified) {
entries.children[child].value.modified = false
}
}
}
function generateMessage(changes, messages) {
for (var changeIndex = 0; changeIndex < changes.length; changeIndex++) {
messages.push(PayloadDictionary.commandTypes[changes[changeIndex][0]] + ", " + PayloadDictionary.commandCodes[changes[changeIndex][1]] + ": " + changes[changeIndex][2])
}
}
function sendChanges(changes) {
for (var changeIndex = 0; changeIndex < changes.length; changeIndex++) {
dataSource.sendCommand(changes[changeIndex][0], changes[changeIndex][1], changes[changeIndex][2])
}
}
label: Label {
visible: titleVisible
width: parent.width
Layout.fillHeight: true
horizontalAlignment: Qt.AlignHCenter
verticalAlignment : Qt.AlignVCenter
font.pixelSize: Style.titleSize
font.family: Style.fontFamily
color: Style.fontAltColor
text: title
background: Rectangle {
anchors.fill: parent
color: "white"
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
Item {
id: ctrl
property alias title: label_name
property alias value: field_value
property alias unit : label_unit
property bool active: true
property var radioGroup: ""
onRadioGroupChanged: {
radio.ButtonGroup.group = radioGroup
}
Layout.fillWidth: true
Layout.fillHeight: true
Layout.margins: 0
property string type: ""
property string code: ""
property var tmp_value
RowLayout {
Layout.margins: 0
spacing: 5
anchors.fill: parent
Label {
id: label_name
Layout.fillHeight: true
Layout.fillWidth: true
color: Style.fontColor
horizontalAlignment: Qt.AlignRight
verticalAlignment: Qt.AlignVCenter
Layout.minimumWidth: 150
Layout.preferredWidth: radio.visible ? parent.width/2 - radio.width + parent.spacing : parent.width/2
font.family: Style.fontFamily
font.pixelSize: Style.titleSize
text: ""
MouseArea {
anchors.fill: parent
onClicked: {
radio.checked = radio.visible
}
}
}
RadioButton {
id: radio
Layout.fillHeight: true
visible: radioGroup === "" ? false : true
checked: active
}
Cell {
id : field_value
active: (!radio.visible || radio.checked) && ctrl.active
Layout.minimumWidth: 50
Layout.preferredWidth: 300
}
Label {
id: label_unit
Layout.fillHeight: true
Layout.fillWidth: true
color: Style.fontColor
verticalAlignment: Qt.AlignVCenter
Layout.minimumWidth: 50
Layout.preferredWidth: parent.width/10
font.family: Style.fontFamily
font.pixelSize: Style.titleSize
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
pragma Singleton
import QtQml 2.12
import QtQuick.Window 2.12
QtObject {
property string fontFamily: "Open Sans"
property int btnPixelSize: Math.ceil(btnHeight * 0.53)
property int mainValueSize: 60
property int tab1Size: 35
property int tab2Size: 30
property int tab3Size: 20
property int titleSize: 35
property int h1Size: 30
property int h2Size: 24
property int h3Size: 20
property int measureSize: 80
property int settingSize: 45
property int pSize: 16
property int tinySize: 10
property color fontColor: "white"
property color fontAltColor: "#212529"
property color mainBgColor: "#1e1e1e"
property color altBgColor: "black"
property color btnUpColor: "white"
property color btnDnColor: "#525556"
property color readOnlyColor: "#cfcfcf"
property color disabledColor: "#333333"
property color acceptedColor: "green"
property color failedColor: "orange"
property color targetColor: "#429c92"
property color measurementColor: "#8e3276"
property color highlightColor: "#8ee5dc"
property int btnWidth: 100
property int btnHeight: 100
property int btnRadius: 10
property int holdSecs: 1
property color pressureAirSupplyColor: "#8b2be2"
property color pressureAirRegulatedColor: "#e8000b"
property color pressureO2SupplyColor: "#023eff"
property color pressureO2RegulatedColor: "#00d7ff"
property color pressureBufferColor: "#ffc400"
property color pressureInhaleColor: "#d3d3d3"
property color pressurePatientColor: "#8080FF"
property color flowDiffPatientColor: "#8CFF80"
property color volumeColor: "#FF8080"
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import QtGraphicalEffects 1.0
Item {
ScrollView {
anchors.fill: parent
ScrollBar.vertical.policy: ScrollBar.AlwaysOn
ListView {
id: listView
interactive: true
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 10
model: dataSource.alarms
delegate: Item {
property QtObject alarm: dataSource.alarms[model.index]
x: 5
width: 80
height: 30
Row {
spacing: 10
Image {
source: alarm.acked ? 'svg/bell-regular.svg' : 'svg/bell-solid.svg'
sourceSize.width: parent.height * 0.8
sourceSize.height: parent.height * 0.8
ColorOverlay {
anchors.fill: parent
source: parent
color: Style.fontColor
}
}
Text {
text: alarm.since.toLocaleString("")
font.family: Style.fontFamily
font.pixelSize: Style.tab2Size
font.italic: true
color: Style.fontColor
}
Text {
text: alarm.until.toLocaleString("")
font.family: Style.fontFamily
font.pixelSize: Style.tab2Size
font.italic: true
color: Style.fontColor
}
Text {
text: PayloadDictionary.commandTypes[alarm.priority] + ": " + PayloadDictionary.commandCodes[alarm.message]
anchors.verticalCenter: parent.verticalCenter
font.family: Style.fontFamily
font.pixelSize: Style.tab2Size
font.bold: !alarm.acked
color: Style.fontColor
}
}
}
}
}
Row {
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 10
anchors.bottom: parent.bottom
anchors.bottomMargin: 80
spacing: 10
RoundButton {
id: btn
width: Style.btnHeight * 1.5
height: Style.btnHeight
Image {
anchors.centerIn: parent
source: "svg/bell-regular.svg"
sourceSize.height: parent.height * 0.8
}
onClicked: acknowledgeAlarms()
}
Text {
anchors.verticalCenter: btn.verticalCenter
text: qsTr("Acknowledge")
font.family: Style.fontFamily
font.pixelSize: Style.tab2Size
color: Style.fontColor
}
RoundButton {
id: silence
width: Style.btnHeight * 1.5
height: Style.btnHeight
Image {
anchors.centerIn: parent
source: "svg/bell-solid.svg"
sourceSize.height: parent.height * 0.8
}
onClicked: silenceAlarms()
}
Text {
anchors.verticalCenter: btn.verticalCenter
text: qsTr("Silence (120 s)")
font.family: Style.fontFamily
font.pixelSize: Style.tab2Size
color: Style.fontColor
}
}
}
This diff is collapsed.
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
ColumnLayout {
function generateMessage(changes, types, codes) {
var messages = []
for (var modeIdx = 0; modeIdx < changes.length; modeIdx++) {
for (var cmdIdx = 0; cmdIdx < changes[modeIdx].length; cmdIdx++) {
messages.push(types[changes[modeIdx][cmdIdx][0]] + ", " + codes[changes[modeIdx][cmdIdx][1]] + ": " + changes[modeIdx][cmdIdx][2])
}
}
return messages
}
function sendChanges(changes, cmd_type) {
for (var modeIdx = 0; modeIdx < changes.length; modeIdx++) {
for (var cmdIdx = 0; cmdIdx < changes[modeIdx].length; cmdIdx++) {
dataSource.sendCommand(cmd_type + changes[modeIdx][cmdIdx][0], changes[modeIdx][cmdIdx][1], changes[modeIdx][cmdIdx][2])
}
}
}
function callback() {
for (var modeIndex in modes.children) {
dataSource.sendCommand("GET_TARGETS", modes.itemAt(modeIndex).mode, 0)
}
}
function acknowledge(result) {
if (result) {
var changes = []
for (var modeIndex in modes.children) {
changes.push(modes.itemAt(modeIndex).getModified())
}
var messages = generateMessage(changes, PayloadDictionary.breathingModes, PayloadDictionary.commandCodes)
function confirmed(result) {
if (result) sendChanges(changes, "SET_TARGET_")
returnConfirmation()
}
if (messages.length > 0) askConfirmation(messages, confirmed)
} else {
callback()
for (var modeIndex in modes.children) {
modes.itemAt(modeIndex).resetModified()
}
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
function getThresholds(child) {
dataSource.sendCommand("GET_THRESHOLD_MIN", buffersLayout.children[child].code, 0)
dataSource.sendCommand("GET_THRESHOLD_MAX", buffersLayout.children[child].code, 0)
}
function callback() {
for (var child in buffersLayout.children) {
singleShot.createObject(this, { action: getThresholds, multiplicator: child, duration: 200})
}
}
function acknowledge(result) {
if (result) {
applyChanges(settings)
} else {
callback()
rejectChanges(settings)
}
}
property string cmd_type: "SET_THRESHOLD_"
ColumnLayout {
anchors.fill: parent
id: settings
Settings_Ctrl {
titleVisible: false
entries: buffersLayout
Layout.fillHeight: true
Layout.fillWidth: true
GridLayout {
id: buffersLayout
anchors.fill: parent
columns: 2
Single_Ctrl {
code: "APNEA"
type : cmd_type + "MIN"
//type_right: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
//value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Double_Ctrl {
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
code: "CHECK_P_PATIENT"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
type: cmd_type + "MAX"
code: "HIGH_FIO2"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
type: cmd_type + "MAX"
code: "HIGH_PRESSURE"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
type: cmd_type + "MAX"
code: "HIGH_RR"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
type: cmd_type + "MAX"
code: "HIGH_VTE"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
type : cmd_type + "MIN"
code: "LOW_VTE"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
}
Single_Ctrl {
type: cmd_type + "MAX"
code: "HIGH_VTI"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
type : cmd_type + "MIN"
code: "LOW_VTI"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
}
Single_Ctrl {
type : cmd_type + "MIN"
code: "LOW_FIO2"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
}
Double_Ctrl {
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
code: "OCCLUSION"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
type: cmd_type + "MAX"
code: "HIGH_PEEP"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
type : cmd_type + "MIN"
code: "LOW_PEEP"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
}
}
}
Confirmation {
callback: acknowledge
Layout.fillHeight: true
Layout.fillWidth: true
}
}
}
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
Item {
function getThresholds(child) {
dataSource.sendCommand("GET_THRESHOLD_MIN", buffersLayout.children[child].code, 0)
dataSource.sendCommand("GET_THRESHOLD_MAX", buffersLayout.children[child].code, 0)
}
function callback() {
for (var child in buffersLayout.children) {
singleShot.createObject(this, { action: getThresholds, multiplicator: child, duration: 200})
}
}
function acknowledge(result) {
if (result) {
applyChanges(settings)
} else {
callback()
rejectChanges(settings)
}
}
property string cmd_type: "SET_THRESHOLD_"
ColumnLayout {
anchors.fill: parent
id: settings
Settings_Ctrl {
titleVisible: false
entries: buffersLayout
Layout.fillHeight: true
Layout.fillWidth: true
GridLayout {
id: buffersLayout
anchors.fill: parent
Layout.topMargin: 20
Layout.bottomMargin: 20
columns: 2
Double_Ctrl{
code: "CHECK_VALVE_EXHALE"
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Double_Ctrl {
code: "EXPIRATION_SENSE_FAULT_OR_LEAK"
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Double_Ctrl {
code: "EXPIRATION_VALVE_LEAK"
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Double_Ctrl {
code: "INTENTIONAL_STOP"
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
code: "LOW_BATTERY"
type : cmd_type + "MIN"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
}
Single_Ctrl {
code: "AC_POWER_DISCONNECTION"
type : cmd_type + "MIN"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
}
Single_Ctrl {
code: "BATTERY_FAULT_SRVC"
type: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Single_Ctrl {
code: "BATTERY_CHARGE"
type : cmd_type + "MIN"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
}
Double_Ctrl {
code: "AIR_FAIL"
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Double_Ctrl {
code: "O2_FAIL"
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Double_Ctrl {
code: "PRESSURE_SENSOR_FAULT"
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
Double_Ctrl {
code: "ARDUINO_FAIL"
type : cmd_type + "MIN"
type_right: cmd_type + "MAX"
title.text: PayloadDictionary.commandCodes[code]
value.readback: dataSource.cmdReadback["GET_THRESHOLD_MIN"][code]
value_right.readback: dataSource.cmdReadback["GET_THRESHOLD_MAX"][code]
}
}
}
Confirmation {
callback: acknowledge
Layout.fillHeight: true
Layout.fillWidth: true
}
}
}
This diff is collapsed.
This diff is collapsed.
// © Copyright CERN, Riga Technical University and University of Liverpool 2020.
// All rights not expressly granted are reserved.
//
// This file is part of hev-sw.
//
// hev-sw is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public Licence as published by the Free
// Software Foundation, either version 3 of the Licence, or (at your option)
// any later version.
//
// hev-sw is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with hev-sw. If not, see <http://www.gnu.org/licenses/>.
//
// The authors would like to acknowledge the much appreciated support
// of all those involved with the High Energy Ventilator project
// (https://hev.web.cern.ch/).
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
Item {
function callback() {
for (var modeIndex in modes.children) {
dataSource.sendCommand("GET_TARGETS", modes.itemAt(modeIndex).mode, 0)
}
}
function acknowledge(result) {
if (result) {
applyChanges(modes)
} else {
callback()
rejectChanges(modes)
}
}
ColumnLayout {
anchors.fill: parent
ColumnLayout {
Layout.fillWidth: true
Layout.fillHeight: true
TabBar {
id: bar
Layout.fillWidth: true
TabButton {
text: PayloadDictionary.breathingModes["PC_AC"]
font.family: Style.fontFamily
font.pixelSize: Style.tab2Size
}
TabButton {
text: PayloadDictionary.breathingModes["PC_AC_PRVC"]
font.family: Style.fontFamily
font.pixelSize: Style.tab2Size
}
TabButton {
text: PayloadDictionary.breathingModes["PC_PSV"]
font.family: Style.fontFamily
font.pixelSize: Style.tab2Size
}
TabButton {
text: PayloadDictionary.breathingModes["CPAP"]
font.family: Style.fontFamily
font.pixelSize: Style.tab2Size
}
// TabButton {
// text: PayloadDictionary.breathingModes["TEST"]
// font.family: Style.fontFamily
// font.pixelSize: Style.tab2Size
// }
}
StackLayout {
id: modes
Layout.fillWidth: true
Layout.fillHeight: true
currentIndex: bar.currentIndex
Mode_Ctrl {
mode: "PC_AC"
}
Mode_Ctrl {
mode: "PC_AC_PRVC"
}
Mode_Ctrl {
mode: "PC_PSV"
}
Mode_Ctrl {
mode: "CPAP"
}
// Mode_Ctrl {
// mode: "TEST"
// }
}
}
Confirmation {
Layout.fillHeight: true
Layout.fillWidth: true
callback: acknowledge
}
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
singleton Style 1.0 Style.qml
singleton PayloadDictionary 1.0 PayloadDictionary.qml
<RCC>
<qresource prefix="/">
<file>qmldir</file>
<file>Style.qml</file>
<file>main.qml</file>
<file>Input_Confirmation.qml</file>
<file>Input_Digits.qml</file>
<file>Input_Language.qml</file>
<file>Input_Mode.qml</file>
<file>Cell.qml</file>
<file>Double_Ctrl.qml</file>
<file>Main_Ctrl.qml</file>
<file>LockArea.qml</file>
<file>Notification.qml</file>
<file>Tab_Alarms.qml</file>
<file>Page_Main.qml</file>
<file>Tab_Main_Basic.qml</file>
<file>Tab_Main_Advanced.qml</file>
<file>Tab_Charts.qml</file>
<file>Tab_Limits_Technical.qml</file>
<file>Tab_Settings.qml</file>
<file>svg/backspace-solid.svg</file>
<file>svg/bell-regular.svg</file>
<file>svg/bell-solid.svg</file>
<file>svg/chart-area-solid.svg</file>
<file>svg/check-solid.svg</file>
<file>svg/exclamation-circle-solid.svg</file>
<file>svg/exclamation-triangle-solid.svg</file>
<file>svg/fan-solid.svg</file>
<file>svg/globe-europe-solid.svg</file>
<file>svg/lock-solid.svg</file>
<file>svg/lungs-solid.svg</file>
<file>svg/pause-solid.svg</file>
<file>svg/play-solid.svg</file>
<file>svg/plug-solid.svg</file>
<file>svg/power-off-solid.svg</file>
<file>svg/sliders-h-solid.svg</file>
<file>svg/sign-in-alt-solid.svg</file>
<file>svg/stop-solid.svg</file>
<file>svg/times-solid.svg</file>
<file>svg/unlock-solid.svg</file>
<file>svg/user-md-solid.svg</file>
<file>Tab_Modes.qml</file>
<file>Mode_Ctrl.qml</file>
<file>Single_Ctrl.qml</file>
<file>Radio_Ctrl.qml</file>
<file>Page_Settings.qml</file>
<file>svg/battery-full-solid.svg</file>
<file>svg/battery-three-quarters-solid.svg</file>
<file>svg/battery-empty-solid.svg</file>
<file>Page_Alarms.qml</file>
<file>Tab_Limits_Clinical.qml</file>
<file>svg/cern-hev-logo-dark.png</file>
<file>Page_Expert.qml</file>
<file>Confirmation.qml</file>
<file>PayloadDictionary.qml</file>
<file>Tab_Ctrl.qml</file>
<file>Settings_Ctrl.qml</file>
<file>Tab_Personal.qml</file>
<file>svg/battery-half-solid.svg</file>
<file>svg/battery-quarter-solid.svg</file>
<file>svg/icon.png</file>
<file>svg/icon.ico</file>
</qresource>
</RCC>
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="backspace" class="svg-inline--fa fa-backspace fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="battery-empty" class="svg-inline--fa fa-battery-empty fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="battery-full" class="svg-inline--fa fa-battery-full fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="battery-half" class="svg-inline--fa fa-battery-half fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="battery-quarter" class="svg-inline--fa fa-battery-quarter fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="battery-three-quarters" class="svg-inline--fa fa-battery-three-quarters fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="bell" class="svg-inline--fa fa-bell fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bell" class="svg-inline--fa fa-bell fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="chart-area" class="svg-inline--fa fa-chart-area fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="check" class="svg-inline--fa fa-check fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="exclamation-circle" class="svg-inline--fa fa-exclamation-circle fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="exclamation-triangle" class="svg-inline--fa fa-exclamation-triangle fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="fan" class="svg-inline--fa fa-fan fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M352.57 128c-28.09 0-54.09 4.52-77.06 12.86l12.41-123.11C289 7.31 279.81-1.18 269.33.13 189.63 10.13 128 77.64 128 159.43c0 28.09 4.52 54.09 12.86 77.06L17.75 224.08C7.31 223-1.18 232.19.13 242.67c10 79.7 77.51 141.33 159.3 141.33 28.09 0 54.09-4.52 77.06-12.86l-12.41 123.11c-1.05 10.43 8.11 18.93 18.59 17.62 79.7-10 141.33-77.51 141.33-159.3 0-28.09-4.52-54.09-12.86-77.06l123.11 12.41c10.44 1.05 18.93-8.11 17.62-18.59-10-79.7-77.51-141.33-159.3-141.33zM256 288a32 32 0 1 1 32-32 32 32 0 0 1-32 32z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="globe-europe" class="svg-inline--fa fa-globe-europe fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="lock" class="svg-inline--fa fa-lock fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="lungs" class="svg-inline--fa fa-lungs fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M636.11 390.15C614.44 308.85 580.07 231 534.1 159.13 511.98 124.56 498.03 96 454.05 96 415.36 96 384 125.42 384 161.71v60.11l-32.88-21.92a15.996 15.996 0 0 1-7.12-13.31V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v170.59c0 5.35-2.67 10.34-7.12 13.31L256 221.82v-60.11C256 125.42 224.64 96 185.95 96c-43.98 0-57.93 28.56-80.05 63.13C59.93 231 25.56 308.85 3.89 390.15 1.3 399.84 0 409.79 0 419.78c0 61.23 62.48 105.44 125.24 88.62l59.5-15.95c42.18-11.3 71.26-47.47 71.26-88.62v-87.49l-85.84 57.23a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09L320 235.23l167.59 111.72a7.994 7.994 0 0 1 2.22 11.09l-8.88 13.31a7.994 7.994 0 0 1-11.09 2.22L384 316.34v87.49c0 41.15 29.08 77.31 71.26 88.62l59.5 15.95C577.52 525.22 640 481.01 640 419.78c0-9.99-1.3-19.94-3.89-29.63z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="pause" class="svg-inline--fa fa-pause fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="play" class="svg-inline--fa fa-play fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="plug" class="svg-inline--fa fa-plug fa-w-12" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z"></path></svg>
\ No newline at end of file
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="power-off" class="svg-inline--fa fa-power-off fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"></path></svg>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment