Index: sources/gui/qml/dialogs/NotificationDialog.qml =================================================================== diff -u -r0975a67dd4e4673b9a7b226bfea02cbfa489c418 -rbd083c017790f073bf4a296e05faf803a240f29f --- sources/gui/qml/dialogs/NotificationDialog.qml (.../NotificationDialog.qml) (revision 0975a67dd4e4673b9a7b226bfea02cbfa489c418) +++ sources/gui/qml/dialogs/NotificationDialog.qml (.../NotificationDialog.qml) (revision bd083c017790f073bf4a296e05faf803a240f29f) @@ -29,362 +29,64 @@ ModalDialog { id : _root contentItem.objectName: "_NotificationDialog" // SquishQt - property alias titleText : _title.text - property alias titlePixelSize : _title.font.pixelSize - property alias instructionModel : _listView.model - property alias titleBarForeground : _title.color - property alias titleBarBackground : _titleBar.color - property alias isSilenced : _headerButtonGroup.isSilenced - property alias timeout : _headerButtonGroup.timeout - property int alarmID : -1 + property alias titleBarBackground : _alarmDialog.titleBarBackground + property alias titleBarForeground : _alarmDialog.titleBarForeground + property int currentScreen : NotificationDialog.AlarmMain - property alias countDown : _timerRect.countDown - property alias countDownVisible : _timerRect.visible - property alias figureImageSource : _figureImage.source - - property bool resumeVisible : false - property bool rinsebackVisible : false - property bool temporaryBreakVisible: false - property bool endVisible : false - property bool okVisible : false - property bool minVisible : true - - property int headerOverlap : 30 - - // Look for this tag: #First_Time_Message_Sent_With_Silenced - // the isSilenced is helping not to show this dialog maximized and - // then if the silence is set minimize it immediately - // this behaviour does not look nice on the screen and it bounces radius : Variables.alarmDialogRadius - signal muteClicked() - signal minimizeClicked() - signal listClicked() - - signal resumeClicked() - signal temporaryBreakClicked() - signal rinsebackClicked() - signal endClicked() - signal okClicked() - - Rectangle { id: _titleBar - height : Variables.alarmDialogHeaderHeight + _root.headerOverlap - width : _root.width - radius : _root.radius - clip : true // the mute button expands so we need to clip the outside unwanted area. - - // TODO: disable doubleClicked later. this is only for diagnostic purpose when alarm dialog covers the entire screen. - MouseArea { id: _minimizeArea - anchors.fill : parent - onDoubleClicked : { if ( ! _root.minVisible ) _diagnosticsDialog.open() } - } - - Text { id: _title - color : Colors.textMain - font.pixelSize : Fonts.fontPixelTitle - text : qsTr("Notification") - font.weight : Font.DemiBold - width : _titleBar.width - - anchors { - left: parent.left - leftMargin: Variables.defaultMargin * 2 - verticalCenter: parent.verticalCenter - verticalCenterOffset: (_root.headerOverlap / 2) * -1 - } - } - - AlarmButtonRow { id: _headerButtonGroup - anchors { - verticalCenter : _titleBar.verticalCenter - verticalCenterOffset: (_root.headerOverlap / 2) * -1 - right : _titleBar.right - rightMargin : Variables.defaultMargin * 2 - } - - isMinButton : true - backgroundColor : _titleBar.color - minMaxVisible : _root.minVisible - - onMuteClicked : _root.muteClicked() - onMinMaxClicked : _root.minimizeClicked() - onListClicked : _root.listClicked() - } + enum AlarmPage { + AlarmMain , + AlarmList } - Rectangle { id: _descriptionRect - color : Colors.offWhite - clip : true - - anchors { - top : _titleBar.bottom - topMargin : _root.headerOverlap * -1 - left : parent.left - right : parent.right - bottom : _timerRect.top - } - - AutoStepController { id: _autoStepController - anchors { - left : parent.left - leftMargin : Variables.defaultMargin * 4 - top : parent.top - topMargin : Variables.defaultMargin * 2 - } - - onTriggered : _listView.currentIndex = (_listView.currentIndex + 1) % _listView.count - } - - ListView {id: _listView - anchors { - top : _autoStepController.bottom - topMargin : Variables.defaultMargin * 3 - bottom : parent.bottom - left : parent.left - leftMargin : Variables.defaultMargin * 4 - } - - height : _descriptionRect.height - width : _descriptionRect.width / 2 - currentIndex: 0 - interactive : false - clip : true - - onCurrentIndexChanged: { - var item = model.get(_listView.currentIndex) - _root.figureImageSource = item.image ?? "" - _autoStepController.refresh() - } - - delegate: Item { id: _delegateControl - width : _listView.width - height : Variables.instructionHeight - clip : true - - Rectangle { id: _stepRect - height : 40 - width : height - radius : height - color : _delegateControl.ListView.isCurrentItem ? Colors.backgroundMainMenu : Colors.offWhite - border { - color: Colors.backgroundMainMenu - width: 2 - } - - Text { id: _stepNumberRect - anchors.centerIn: parent - text : index + 1 - color : _delegateControl.ListView.isCurrentItem ? Colors.offWhite : Colors.backgroundMainMenu - font.pixelSize : 20 - font.weight : Font.Medium - } - - layer.enabled : true - layer.effect : DropShadow { id: _dropShadow - horizontalOffset: 0 - verticalOffset : 3 - radius : 3.0 - samples : 7 - color : "#50000000" - source : _stepRect - anchors.fill : _stepRect - } - } - - Text { id: _delegateText - anchors { - left : _stepRect.right - leftMargin : Variables.defaultMargin - right : _delegateControl.right - } - height : parent.height - width : parent.width - font.pixelSize : Fonts.fontPixelInstructionStep - font.weight : _delegateControl.ListView.isCurrentItem ? Font.DemiBold : Font.Normal - color : _delegateControl.ListView.isCurrentItem ? "#18559E" : Colors.alarmDialogText - text : model.instruction - wrapMode : Text.WordWrap - } - - MouseArea { - anchors.fill: parent - onClicked: _listView.currentIndex = index - } - } - } - - Image { id: _figureImage - anchors{ - right : parent.right - bottom : parent.bottom - bottomMargin: Variables.defaultMargin * 3 - } - } - // TODO TEST ON NEW DISPLAY AND ADD BACK IN -// InteractiveImage { id: _figureImage -// anchors { -// right : parent.right -// bottom : parent.bottom -// bottomMargin : Variables.defaultMargin * 3 - -// } -// width : parent.width / 2 -// height : _listView.height -// } + function alarmMaximize() { + currentScreen = NotificationDialog.AlarmMain + open() } - Rectangle { id: _timerRect - property int countDown : 0 - - height : 70 - width : parent.width / 3 - - anchors { - bottom : _alarmID.top - bottomMargin : Variables.defaultMargin * 2 - left : parent.left - leftMargin : Variables.defaultMargin * 4 - } - - color : "#FFECEC" - radius : height - - Text { id: _astrix - anchors { - left : parent.left - leftMargin : Variables.defaultMargin * 3 - top : _timerDescription.top - } - - color : "#AB352E" - text : "*" - font.pixelSize : 25 - font.weight : Font.Medium - } - - Text { id: _timerDescription - anchors { - verticalCenter : parent.verticalCenter - left : _astrix.right - } - - color : "black" - text : qsTr("Rinseback will not be allowed in:") - font.pixelSize : 25 - font.weight : Font.Medium - } - - TimeText { id: _timeoutText - seconds : countDown * 60 - anchors { - verticalCenter : parent.verticalCenter - left : _timerDescription.right - } - height : _titleBar.height - textPixelSize : 35 - textWeight : Font.Bold - secondsVisible : false - hourZero : false - minuteZero : true - textColor : "#AB352E" - } + function alarmList() { + currentScreen = NotificationDialog.AlarmList + open() } - Row { id: _buttonGroup - property int buttonsWidth : 350 - spacing: 50 + AlarmDialog { id : _alarmDialog + // this will change later to the actual message text + // and the instruction would be in the dialog content + visible : currentScreen === NotificationDialog.AlarmMain + titleText : vAlarmStatus.title + titlePixelSize : Fonts.fontPixelAlarmTitle + instructionModel : vAlarmStatus.instructions + alarmID : vAlarmStatus.alarm_AlarmID + isSilenced : vAlarmStatus.alarm_Flag_alarmsSilenced + timeout : vAlarmStatus.alarm_MuteTimeout + okVisible : vAlarmStatus.alarm_Flag_UserMustAck + resumeVisible : ! vAlarmStatus.alarm_Flag_noResume + rinsebackVisible : ! vAlarmStatus.alarm_Flag_noRinseback + endVisible : ! vAlarmStatus.alarm_Flag_noEndTreatment + temporaryBreakVisible : ! vAlarmStatus.alarm_Flag_noTemporaryBreak + minVisible : ! vAlarmStatus.alarm_Flag_noMinimize + countDown : vTreatmentStop.countDown + countDownVisible : vTDOpMode.inTreatment + && vTreatmentStop.total - anchors { - bottom : parent.bottom - horizontalCenter: parent.horizontalCenter - rightMargin : spacing - leftMargin : spacing - bottomMargin : Variables.defaultMargin * 4 - } - - // IMPORTANT NOTE : Alarm Dialog buttons - // It has been granteed by FW that there should never be more than 3 buttons on the ScreenItem - // Regarding the discussion there should be only 3 situations: - // 1 - Different combination of the Resume,Rinseback,End - // 2 - OK button for user to only ack the alarm - // 3 - No button at all for the situations that the alarm cannot be resolved by user. - // :: OK button and the other 3 buttons (Resume,Rinseback,End) should never come together - TouchRect { id : _resumeTouchRect - visible : resumeVisible - onPressed : resumeClicked() - text.text : qsTr("Resume") - width : _buttonGroup.buttonsWidth - isDefault : true - backgroundColor: Colors.white - fgColor : isPressed ? Colors.white : borderColor - selectColor : Qt.darker(borderColor, 1.15) - pixelSize : Fonts.fontPixelNotification - } - - TouchRect { id : _temporaryBreak - visible : temporaryBreakVisible - onPressed : temporaryBreakClicked() - text.text : qsTr("Temporary Break") - width : _buttonGroup.buttonsWidth - backgroundColor: Colors.white - fgColor : isPressed ? Colors.white : borderColor - selectColor : Qt.darker(borderColor, 1.15) - pixelSize : Fonts.fontPixelNotification - } - - TouchRect { id : _rinsebackTouchRect - visible : rinsebackVisible - onPressed : rinsebackClicked() - text.text : qsTr("Return Blood & End Treatment") - width : _buttonGroup.buttonsWidth - backgroundColor: Colors.white - fgColor : isPressed ? Colors.white : borderColor - selectColor : Qt.darker(borderColor, 1.15) - pixelSize : Fonts.fontPixelNotification - } - - TouchRect { id : _endTouchRect - visible : endVisible - onPressed : endClicked() - text.text : qsTr("End Treatment Only") - width : _buttonGroup.buttonsWidth - backgroundColor: Colors.white - fgColor : isPressed ? Colors.white : borderColor - selectColor : Qt.darker(borderColor, 1.15) - pixelSize : Fonts.fontPixelNotification - } - - TouchRect { id : _okTouchRect - visible : okVisible - onPressed : okClicked() - text.text : qsTr("OK") - width : _buttonGroup.buttonsWidth - backgroundColor: Colors.white - fgColor : isPressed ? Colors.white : borderColor - selectColor : Qt.darker(borderColor, 1.15) - pixelSize : Fonts.fontPixelNotification - } + onMuteClicked : vAlarmStatus.doSilence () + onResumeClicked : vAlarmStatus.doUserActionResume () + onRinsebackClicked : vAlarmStatus.doUserActionRinseback () + onEndClicked : vAlarmStatus.doUserActionEnd () + onTemporaryBreakClicked : vAlarmStatus.doUserActionTemporaryBreak () + onOkClicked : vAlarmStatus.doUserActionOk () + onListClicked : alarmList () + onMinimizeClicked : alarmMinimize () } - Text { id: _alarmID - text : ("[%1:%2]") .arg(qsTr("ID")) - .arg(_root.alarmID) - anchors { - left : parent.left - bottom : parent.bottom - leftMargin : Variables.defaultMargin * 3 - bottomMargin: Variables.defaultMargin - } - color : Colors.alarmDialogGreyText - font.pixelSize : Fonts.fontPixelAlarmID + AlarmListDialog { id : _alarmListDialog + visible : currentScreen === NotificationDialog.AlarmList + isSilenced : vAlarmStatus.alarm_Flag_alarmsSilenced + timeout : vAlarmStatus.alarm_MuteTimeout + minVisible : ! vAlarmStatus.alarm_Flag_noMinimize + onMuteClicked : vAlarmStatus.doSilence() + onMinimizeClicked : alarmMinimize() + onListClicked : alarmMaximize() } - - Connections { target: vAlarmStatus - function onDidAlarmRaise ( ) { - // image is out of sync when a new alarm is appears so on new alarm go to step 1 image - if ( _root.instructionModel.rowCount() > 0) { - figureImageSource = _root.instructionModel.get(0).image - } - } - } }