/*! * * Copyright (c) 2022-2025 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file VConfirm.h * \author (last) Dara Navaei * \date (last) 18-Mar-2025 * \author (original) Behrouz NematiPour * \date (original) 30-Sep-2022 * */ #pragma once #include #include // Project #include "main.h" // Doxygen : do not remove #include "VAdjustmentResponseBase.h" #include "MDuetConfirmHDi.h" #include "MAdjustPowerOff.h" #include "MSettings.h" namespace View { /*! * \brief The VConfirm class * \details View for Model's Data representation. * * \sa Model::MHDPostSingleResult * \sa Model::MHDPostFinalResult * */ class VConfirm : public VAdjustmentResponseBase { Q_OBJECT // // friends // friend class ::tst_views; struct ConfirmData { QString title = ""; QString message = ""; QString confirm = ""; QString cancel = ""; }; QMap _confirms; // ********** DYNAMIC PROPERTIES: The properties which need to be updated by each confirm message received. ********** // READONLY( bool , needConfirm , false) // disabled coco begin validated: // The property adjustment_Triggered has to be always true // and to always trigger the change event to work as a notifier for GUI // has been manually tested that it works perfectly fine TRIGGER ( bool , adjustment , 0) // disabled coco end PROPERTY(quint32 , id , 0) PROPERTY(quint32 , command , 0) TRIGGER( quint8 , poweroff , 0) PROPERTY(bool , isPowerOff , 0) PROPERTY(bool , isTimeout , 0) PROPERTY(bool , isReject , 0) PROPERTY(bool , isAccept , 0) PROPERTY(bool , isUltrafilt , 0) PROPERTY(bool , isConnection , 0) PROPERTY(float , extraParam1 , 0) PROPERTY(float , extraParam2 , 0) PROPERTY(float , extraParam3 , 0) PROPERTY(float , extraParam4 , 0) TRIGGER (bool , visible , 0) void titleModifier ( QString & ) const {} void messageModifier ( QString &vValue ) const { // this code can be improved more. // ".\s*[{1-4]\s*\:\s*[1-3}]\s*." QString regstr = ".\\s*[{1-4]\\s*\\:\\s*[1-3}]\\s*."; QRegExp reg(regstr); int pos = 0; while ( (pos = reg.indexIn(vValue)) != -1 ) { int len = reg.matchedLength(); QString placeholder = vValue.mid(pos, len) ; QString tmp = placeholder; QStringList params = tmp.remove("{").remove("}").split(":"); // no checking required since the regex has chaecked and found the placeholder. float param = 0.0; int index = params[0].toInt(); switch (index) { case 1: param = _extraParam1; break; case 2: param = _extraParam2; break; case 3: param = _extraParam3; break; case 4: param = _extraParam4; break; } QString replacement = QString("%1").arg(param); //DEBUG qDebug() << "@" << vValue << tmp << replacement; vValue.replace(placeholder, replacement); } } void confirmModifier ( QString & ) const {} void cancelModifier ( QString & ) const {} IDBASED (QString , title ,tr("Confirm" ), confirms, id) IDBASED (QString , message ,tr("Are you sure?" ), confirms, id) IDBASED (QString , confirm ,tr("CONFIRM" ), confirms, id) IDBASED (QString , cancel ,tr("CANCEL" ), confirms, id) void setConfirmCommand (const DuetConfirmHDiData &vData); void setConfirmId (const DuetConfirmHDiData &vData); void setPowerOffCommand (); void setPowerOffId (); void setDryDemoStatus (const DuetConfirmHDiData &vData); VIEW_DEC_CLASS (VConfirm ) VIEW_DEC_SLOT (DuetConfirmHDiData ) VIEW_DEC_SLOT (PowerOffData ) VIEW_DEC_SLOT (SettingsData ) public slots: void doConfirm (bool vConfirm ); void sendDryDemoCommand (quint32 vCommandID ); signals: /*! * \brief didAdjustment * \details the notification signal to send the user's Confirmation * \param vData - data model includes request information */ void didAdjustment(const DuetConfirmUIrData &vData); }; }