Index: denali.qrc =================================================================== diff -u -r2f7a4176a08ba884281b370d452f19c25501a4b4 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- denali.qrc (.../denali.qrc) (revision 2f7a4176a08ba884281b370d452f19c25501a4b4) +++ denali.qrc (.../denali.qrc) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -19,6 +19,7 @@ resources/images/Power_symbol-128.png resources/images/splash.png resources/images/ArrowRight.png + resources/images/logo d Dark Transparent.png sources/gui/qml/components/MainMenu.qml @@ -33,7 +34,8 @@ sources/gui/qml/components/ExportButton.qml sources/gui/qml/components/TouchArea.qml sources/gui/qml/components/TextRect.qml - sources/gui/qml/components/BackgroundRect.qml + sources/gui/qml/components/Background.qml + sources/gui/qml/components/Line.qml qtquickcontrols2.conf Index: resources/images/Logo d.png =================================================================== diff -u -r5194f3afffb28dac90a7ca4153b6a0ca2f239387 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 Binary files differ Index: resources/images/logo d Dark Transparent.png =================================================================== diff -u Binary files differ Index: sources/gui/qml/components/Background.qml =================================================================== diff -u --- sources/gui/qml/components/Background.qml (revision 0) +++ sources/gui/qml/components/Background.qml (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -0,0 +1,29 @@ +/*! + * + * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. + * \copyright \n + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, \n + * IN PART OR IN WHOLE, \n + * WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. \n + * + * \file Background.qml + * \date 2020/01/11 + * \author Behrouz NematiPour + * + */ + +// Qt +import QtQuick 2.0 + +// Project + + +Rectangle { id: _root + + property alias bgColor : _root.color + property alias bgOpacity : _root.opacity + + anchors.fill: parent + color: "gray" + opacity: 0.5 +} Fisheye: Tag 442d1c4f53c96991d4103485ff5ff683ed00d4f7 refers to a dead (removed) revision in file `sources/gui/qml/components/BackgroundRect.qml'. Fisheye: No comparison available. Pass `N' to diff? Index: sources/gui/qml/components/Line.qml =================================================================== diff -u --- sources/gui/qml/components/Line.qml (revision 0) +++ sources/gui/qml/components/Line.qml (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -0,0 +1,37 @@ +/*! + * + * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. + * \copyright \n + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, \n + * IN PART OR IN WHOLE, \n + * WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. \n + * + * \file Line.qml + * \date 2020/01/11 + * \author Behrouz NematiPour + * + */ + +// Qt +import QtQuick 2.0 + +// Project +import "qrc:/globals" + +Rectangle { id: _root + enum Orientation { + Horizontal, + Vertical + } + + property alias bgColor : _root.color + property alias bgOpacity : _root.opacity + + property int orientation: Line.Orientation.Horizontal + property int length : 20 + property int thickness : 1 + + width : orientation === Line.Orientation.Horizontal ? length : thickness + height: orientation === Line.Orientation.Vertical ? length : thickness + color: Colors.line +} Index: sources/gui/qml/components/MainMenu.qml =================================================================== diff -u -r227f28b202f81ab3dd04a81868697025ccab6220 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/components/MainMenu.qml (.../MainMenu.qml) (revision 227f28b202f81ab3dd04a81868697025ccab6220) +++ sources/gui/qml/components/MainMenu.qml (.../MainMenu.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -25,41 +25,75 @@ * which contains three [Treatment, Manager, Settings] */ Item { id: _root - property variant titles: [] + enum Position { + Top, + Bottom + } + property variant titles : [] + property bool hidden : false + property int position : MainMenu.Position.Bottom + property bool hasRightText : false + property int rightTextGaps : 20 + property bool hasLogo : false + /*! * \brief Emits when a menu item pressed * \param vIndex is the index of the pressed item */ signal itemPressed(int vIndex) + /*! + * this section olds somkind of the private sections of the object + * this section is used as the calculation section whcih soppose not to be changed by user. + */ + QtObject { id: _private + readonly property variant repeaterTitles: hasRightText ? titles.slice(0,titles.length - 1) : titles + readonly property string rightText : titles.length ? titles[titles.length - 1] : "" + readonly property int partitionWidth: _row.width / ( _private.repeaterTitles.length * 2 + 1) + } + /*! type:int * this property holds the width of each partition * regarding to the menuitem count and menu width */ - property int partitionWidth: _row.width / (titles.length*2 + 1) + property int partitionWidth : _private.partitionWidth + property alias spacing : _row.spacing + property alias leftPdding : _row.leftPadding + property alias rightPdding : _row.rightPadding + + clip: true + x: 0 + y: Variables.applicationHeight - Variables.mainMenuHeight + width: parent.width height: Variables.mainMenuHeight - anchors { - right : parent.right - left : parent.left - bottom: parent.bottom - } Rectangle { id: _backgroundRect anchors.fill: parent color: Colors.backgroundMainMenu } + MouseArea { id: _clickPropagationDisabler + anchors.fill: parent + } + Image { id: _image + visible: hasLogo + anchors.centerIn: parent + width : Variables.logoWidth + height: Variables.logoHeight + source: "qrc:/images/iLogoDDT" + } + // normal texts with highlighter bottom ribon. Row { id: _row anchors.fill: parent spacing : partitionWidth leftPadding : partitionWidth rightPadding: partitionWidth Repeater { id: _repeater - model: titles + model: _private.repeaterTitles TouchRect { id : _touchRect objectName: "_touchRect" + index //SquishQt testability width: partitionWidth @@ -74,14 +108,48 @@ } } + // the right outer most text with vertical line as a separator + Line { + visible: hasRightText + orientation: Line.Orientation.Vertical + length: parent.height - rightTextGaps + anchors.right: _rightTouchRect.left + anchors.verticalCenter: parent.verticalCenter + } + TouchRect { id : _rightTouchRect + visible: hasRightText + objectName: "_rightTouchRect" //SquishQt testability + width: partitionWidth + rightTextGaps + height: parent.height + text.text: _private.rightText + border.width: 0 + button.onPressed: { + console.debug(titles) + itemPressed( titles.length ? titles.length - 1 : -1 ) + } + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + } + + // normal text bottom highlighter Rectangle { id : _highlightRect color: Colors.backgroundButtonSelect width: partitionWidth - x : partitionWidth + x : leftPdding height: 10 radius: 10 anchors.bottom: parent.bottom anchors.bottomMargin: -5 - Behavior on x { PropertyAnimation {} } + Behavior on x { PropertyAnimation { /*duration: 500; easing.type: Easing.OutBounce*/ } } } + + // hidden animation to hide the menu nicely. + Behavior on y { PropertyAnimation { /*duration: 500; easing.type: Easing.OutBounce*/ } } + onHiddenChanged: { + if ( position === MainMenu.Position.Top ) { + y = hidden ? - Variables.mainMenuHeight : 0 + } else { + y = Variables.applicationHeight - (hidden ? 0 : Variables.mainMenuHeight) + } + } } Index: sources/gui/qml/components/TextRect.qml =================================================================== diff -u -r2f7a4176a08ba884281b370d452f19c25501a4b4 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/components/TextRect.qml (.../TextRect.qml) (revision 2f7a4176a08ba884281b370d452f19c25501a4b4) +++ sources/gui/qml/components/TextRect.qml (.../TextRect.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -32,12 +32,14 @@ property string label : "" property string labelColor : Colors.textTextRectLabel property bool labelAutoSize : false - property int labelwidth : 80 // text:3 Digit "000" & pixel: 46 => width: 80 + property int labelWidth : 80 // text:3 Digit "000" & pixel: 46 => width: 80 + property alias labelHeight : _labelText.height + property alias labelFont : _labelText.font property string extra : "" property string extraColor : Colors.textTextRectExtra - readonly property int titleVSpacing : 5 + readonly property int titleVSpacing : 0 readonly property int textHSpacing : 5 width : _column.width @@ -47,8 +49,10 @@ width : Math.max(_titleText.width , _row.width ) height: _titleText.height + _row.height + spacing anchors.fill: parent - spacing: titleVSpacing + spacing: _root.title ? titleVSpacing : 0 Text { id: _titleText + width : _root.title ? contentWidth : 0 + height: _root.title ? contentHeight : 0 text: _root.title color: titleColor font.pixelSize: Fonts.fontPixelTextRectTitle @@ -59,14 +63,17 @@ height: _labelText.height + _extraText.height spacing: textHSpacing Text { id: _labelText - width: labelAutoSize ? contentWidth : labelwidth + width : labelAutoSize ? contentWidth : labelWidth + height: contentHeight text: _root.label color: labelColor font.pixelSize: Fonts.fontPixelTextRectLabel verticalAlignment: Text.AlignBottom horizontalAlignment: Text.AlignRight } Text { id: _extraText + width : contentWidth + height: contentHeight text: _root.extra color: extraColor font.pixelSize: Fonts.fontPixelTextRectExtra Index: sources/gui/qml/components/TouchArea.qml =================================================================== diff -u -r2f7a4176a08ba884281b370d452f19c25501a4b4 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/components/TouchArea.qml (.../TouchArea.qml) (revision 2f7a4176a08ba884281b370d452f19c25501a4b4) +++ sources/gui/qml/components/TouchArea.qml (.../TouchArea.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -28,13 +28,21 @@ * next to the right edge of the component. */ Item { id : _root - property string title : "" - property bool isTouchable : true + enum Orientation { + Horizontal, + Vertical + } + + property string title : "" + property int titleLetterSpacing : 3 + property bool isTouchable : true + property int orientation : TouchArea.Orientation.Horizontal property list components - readonly property int titleVSpacing : 20 - readonly property int componentsHSpacing : 80 - readonly property int arrowSpacing : 40 + property int titleVSpacing : 20 + property int componentsHSpacing : 80 + property int componentsVSpacing : 0 + property int arrowSpacing : 40 signal clicked() @@ -43,18 +51,19 @@ clip: true Column { id: _column - width: Math.max(_titleText.width , _row.width) - height: _titleText.height + _row.height - spacing: titleVSpacing - Row { - Text { id: _titleText - text: _root.title - font.pixelSize: Fonts.fontPixelTouchAreaTitle - color: Colors.touchTextAreaTitle - } + width : Math.max(_titleText.width , _grid.width) + height : _titleText.height + _grid.height + spacing : titleVSpacing + Text { id: _titleText + text: _root.title + font.pixelSize: Fonts.fontPixelTouchAreaTitle + font.letterSpacing: titleLetterSpacing + color: Colors.touchTextAreaTitle } - Row { id: _row - spacing: componentsHSpacing + Grid { id: _grid + columns : orientation === TouchArea.Orientation.Horizontal ? components.length : 1 + rows : orientation === TouchArea.Orientation.Vertical ? components.length : 1 + spacing : orientation === TouchArea.Orientation.Horizontal ? componentsHSpacing : componentsVSpacing children: components } } Index: sources/gui/qml/globals/Colors.qml =================================================================== diff -u -r2f7a4176a08ba884281b370d452f19c25501a4b4 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision 2f7a4176a08ba884281b370d452f19c25501a4b4) +++ sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -47,4 +47,6 @@ readonly property color textTextRectLabel : "#e8e8e8" readonly property color textTextRectExtra : "#708795" + readonly property color line : "#094266" + } Index: sources/gui/qml/globals/Fonts.qml =================================================================== diff -u -r2f7a4176a08ba884281b370d452f19c25501a4b4 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/globals/Fonts.qml (.../Fonts.qml) (revision 2f7a4176a08ba884281b370d452f19c25501a4b4) +++ sources/gui/qml/globals/Fonts.qml (.../Fonts.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -30,4 +30,7 @@ readonly property int fontPixelTextRectTitle : 25 readonly property int fontPixelTextRectLabel : 46 readonly property int fontPixelTextRectExtra : 28 + + readonly property int fontPixelVitals : 68 + } Index: sources/gui/qml/main.qml =================================================================== diff -u -r227f28b202f81ab3dd04a81868697025ccab6220 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/main.qml (.../main.qml) (revision 227f28b202f81ab3dd04a81868697025ccab6220) +++ sources/gui/qml/main.qml (.../main.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -58,9 +58,6 @@ // 1 - 3 TreatmentStack { id: _treatmentStack } - // 2 - Header - LogoD { id: _headerLogo } - // 3 - Footer MainMenu { id: _mainMenu titles: [ qsTr("Treatment") , qsTr("Manager") , qsTr("Settings") ] Index: sources/gui/qml/pages/SettingsHome.qml =================================================================== diff -u -r227f28b202f81ab3dd04a81868697025ccab6220 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/pages/SettingsHome.qml (.../SettingsHome.qml) (revision 227f28b202f81ab3dd04a81868697025ccab6220) +++ sources/gui/qml/pages/SettingsHome.qml (.../SettingsHome.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -28,6 +28,27 @@ * which is the default screen in the "Settings" stack */ ScreenItem { id: _root + + USBButton { id: _usb + anchors { + top : parent.top + right : _export.left + topMargin : (Variables.headerHeight - Variables.logoHeight) / 2 + rightMargin : (Variables.headerHeight - Variables.logoHeight) / 2 + } + } + + ExportButton { id: _export + width: 150 + height: 50 + anchors { + top : parent.top + right : _poweroff.left + topMargin : (Variables.headerHeight - Variables.logoHeight) / 2 + rightMargin : (Variables.headerHeight - Variables.logoHeight) / 2 + } + } + TouchRect { id : _poweroff width: 150 height: Variables.logoHeight Index: sources/gui/qml/pages/TreatmentHome.qml =================================================================== diff -u -r227f28b202f81ab3dd04a81868697025ccab6220 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/pages/TreatmentHome.qml (.../TreatmentHome.qml) (revision 227f28b202f81ab3dd04a81868697025ccab6220) +++ sources/gui/qml/pages/TreatmentHome.qml (.../TreatmentHome.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -32,6 +32,9 @@ property alias startTreatmentButton : _startTreatmentRect.button property alias createTreatmentButton: _createTreatmentRect.button + // 2 - Header + LogoD { id: _headerLogo } + // exported properties TreatmentStart { id : _treatmentStart onBackPressed: { @@ -65,4 +68,10 @@ } } } + + onVisibleChanged: { + if (visible) { + _mainMenu.hidden = false + } + } } Index: sources/gui/qml/pages/TreatmentStack.qml =================================================================== diff -u -r227f28b202f81ab3dd04a81868697025ccab6220 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/pages/TreatmentStack.qml (.../TreatmentStack.qml) (revision 227f28b202f81ab3dd04a81868697025ccab6220) +++ sources/gui/qml/pages/TreatmentStack.qml (.../TreatmentStack.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -28,6 +28,18 @@ * is selected from the main menu. */ StackItem { id : _root + MainMenu { id: _treatmentMenu + y : -Variables.mainMenuHeight + position : MainMenu.Position.Top + hidden : true + titles : [ qsTr("Basic") , qsTr("Advanced") , qsTr("Trending") , qsTr("Settings") ] + spacing : 20 + leftPdding : 20 + partitionWidth : 100 + hasRightText : true + hasLogo : true + } + TreatmentHome { id : _treatmentHome } stackView.initialItem : _treatmentHome } Index: sources/gui/qml/pages/TreatmentStart.qml =================================================================== diff -u -r2f7a4176a08ba884281b370d452f19c25501a4b4 -r442d1c4f53c96991d4103485ff5ff683ed00d4f7 --- sources/gui/qml/pages/TreatmentStart.qml (.../TreatmentStart.qml) (revision 2f7a4176a08ba884281b370d452f19c25501a4b4) +++ sources/gui/qml/pages/TreatmentStart.qml (.../TreatmentStart.qml) (revision 442d1c4f53c96991d4103485ff5ff683ed00d4f7) @@ -29,67 +29,154 @@ */ ScreenItem { id: _root - property int bloodFlow_MeasuredFlow_Precision: 2 + property int bloodFlow_MeasuredFlow_Precision: 0 - signal backPressed() + property int leftColumnX : 40 + property int rightColumnX : 875 - BackButton { id : _backButton - onPressed: backPressed() - } + property int row1Y : 100 + property int row2Y : 320 + property int row3Y : 570 - //Column { - // spacing: Variables.columnSpacing - // anchors.centerIn: parent - // TitleText { id: _titleText - // width: parent.width - // text: qsTr("Start Treatment Placeholder") - // } - //} + property int lineLength : 450 + property int leftLinesX : 0 + property int rightLinesX : Variables.applicationWidth - lineLength + property int row1LineY : 275 + property int row2LineY : 525 - USBButton { - x: 200 - anchors { - top : parent.top - topMargin : (Variables.headerHeight - Variables.logoHeight) / 2 - rightMargin : (Variables.headerHeight - Variables.logoHeight) / 2 - } - } - ExportButton { - x: 300 - width: 150 - height: 50 - anchors { - top : parent.top - topMargin : (Variables.headerHeight - Variables.logoHeight) / 2 - rightMargin : (Variables.headerHeight - Variables.logoHeight) / 2 - } - } + signal backPressed() - TouchArea { - x: 46 // Hard Coded for now - y: 113 // Hard Coded for now + // ---------- COLUMN LEFT + TouchArea { id: _flowsTouchArea + x: leftColumnX + y: row1Y title: qsTr("FLOWS") components: [ TextRect { id: _bloodFlow title: qsTr("Blood") label: "600" // value - extra: "mL" // unit + extra: qsTr("mL") // unit + labelFont.weight: Font.ExtraLight } , TextRect { id: _dialysateFlow title: qsTr("Dialysate") label: "500" // value - extra: "mL" // unit + extra: qsTr("mL") // unit + labelFont.weight: Font.ExtraLight } ] } - Connections { - target: _GuiView + + Line { x: 0; y: row1LineY; length: lineLength } + + TouchArea { id: _vitalsTouchArea + x: leftColumnX + y: row2Y + isTouchable: false + orientation: TouchArea.Orientation.Vertical + title: qsTr("VITALS") + components: [ + TextRect { id: _bloodPressure + labelHeight: 60 + labelFont.pixelSize: Fonts.fontPixelVitals + labelFont.weight: Font.ExtraLight + labelAutoSize: true + label: "120/80" // value + extra: qsTr("mmHg") // unit + } , + TextRect { id: _heartBeat + labelHeight: 40 + labelFont.pixelSize: Fonts.fontPixelVitals + labelFont.weight: Font.ExtraLight + labelAutoSize: true + label: "130" // value + extra: qsTr("BPM") // unit + } + ] + } + + Line { x: 0; y: row2LineY; length: lineLength } + + TouchArea { id: _pressureTouchArea + x: leftColumnX + y: row3Y + width: _flowsTouchArea.width + isTouchable: true + orientation: TouchArea.Orientation.Vertical + title: qsTr("PRESSURE") + " " + qsTr("(mmHg)") + } + + // ---------- COLUMN RIGHT + TouchArea { id: _ultrafiltrationTouchArea + x: rightColumnX + y: row1Y + width: _flowsTouchArea.width + isTouchable: true + orientation: TouchArea.Orientation.Vertical + title: qsTr("ULTRAFILTRATION VOLUME") + " " + qsTr("(mL)") + } + + Line { x: rightLinesX; y: row1LineY; length: lineLength } + + TouchArea { id: _fluidManagementTouchArea + x: rightColumnX + y: row2Y + width: _flowsTouchArea.width + height: 200 + isTouchable: false + title: qsTr("FLUID MANAGEMENT") + titleVSpacing: 40 + TouchRect { + y : 60 + width : 340 + height : 55 + text.text: qsTr("START BOLUS (100 mL)") + text.font { + weight: Font.DemiBold + pixelSize : 20 + letterSpacing: 3 + } + animated: true + duration: 100 + } + } + + Line { x: rightLinesX; y: row2LineY; length: lineLength } + + TouchArea { id: _solutionInfusionTouchArea + x: rightColumnX + y: row3Y + width: _flowsTouchArea.width + isTouchable: false + orientation: TouchArea.Orientation.Vertical + title: qsTr("SOLUTION INFUSION") + } + + onVisibleChanged: { + if (visible) { + _mainMenu.hidden = true + _treatmentMenu.hidden = false + } + } + + Connections { target: _GuiView onDidActionReceive: { if ( ! visible ) return; switch(vAction) { case GuiActions.BloodFlow: - _bloodFlow.label = vData[GuiActions.BloodFlow_MeasuredFlow ].toFixed(BloodFlow_MeasuredFlow_Precision); + _bloodFlow.label = vData[GuiActions.BloodFlow_MeasuredFlow].toFixed(bloodFlow_MeasuredFlow_Precision); } } } + Connections { target: _treatmentMenu + onItemPressed: { + // TEST CODE : this is a test code since the back button has been removed + // and also we don't have Treatment complete yet. + if (vIndex == 0) { + _treatmentMenu.hidden = true + backPressed() + } + } + + } }