Index: sources/storage/Settings.cpp =================================================================== diff -u -r4947841e8cdd7e72d4fe26e604f7e5061fb86d64 -r7a3067893b8133d0f47bbdddd3268439e722d37d --- sources/storage/Settings.cpp (.../Settings.cpp) (revision 4947841e8cdd7e72d4fe26e604f7e5061fb86d64) +++ sources/storage/Settings.cpp (.../Settings.cpp) (revision 7a3067893b8133d0f47bbdddd3268439e722d37d) @@ -73,6 +73,7 @@ case eConfigurationsDataList : case eAlarms : case eEvents : + case eRejects : case eGenericConfirm : mSettingFile.setFile(fileName(mCategory, _Settings.systemLocale())); // FALLTHROUGH Index: sources/storage/Settings.h =================================================================== diff -u -ra522e6aa7a36ac696a9a956200e89d838f319e25 -r7a3067893b8133d0f47bbdddd3268439e722d37d --- sources/storage/Settings.h (.../Settings.h) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) +++ sources/storage/Settings.h (.../Settings.h) (revision 7a3067893b8133d0f47bbdddd3268439e722d37d) @@ -123,6 +123,7 @@ eInstructions , eConfigurationsDataList , // TODO: the category for this conf is not used. may need to be merged into the Settings, but since it is list, It needs a little more thought. eAlarms , + eRejects , eEvents , eMessagesUnhandled , eGenericConfirm , @@ -155,6 +156,7 @@ case eConfigurationsDataList : return Storage::Settings_Category_ConfigurationsDataList ; case eAlarms : return Storage::Settings_Category_Alarms ; case eEvents : return Storage::Settings_Category_Events ; + case eRejects : return Storage::Settings_Category_Rejects ; case eMessagesUnhandled : return Storage::Settings_Category_MessagesUnhandled ; case eGenericConfirm : return Storage::Settings_Category_GenericConfirm ; } @@ -185,6 +187,7 @@ static bool isCategoryInstructions (const QString &vCategory) { return vCategory == category( eInstructions ); } static bool isCategoryConfigurationsDataList (const QString &vCategory) { return vCategory == category( eConfigurationsDataList ); } static bool isCategoryAlarms (const QString &vCategory) { return vCategory == category( eAlarms ); } + static bool isCategoryRejects (const QString &vCategory) { return vCategory == category( eRejects ); } static bool isCategoryMessagesUnhandled (const QString &vCategory) { return vCategory == category( eMessagesUnhandled ); } static bool isCategoryConfirm (const QString &vCategory) { return vCategory == category( eGenericConfirm ); } static bool isKeyTitle (const QString &vKey ) { return vKey == key ( eKeyTitle ); } Index: sources/storage/StorageGlobals.cpp =================================================================== diff -u -ra522e6aa7a36ac696a9a956200e89d838f319e25 -r7a3067893b8133d0f47bbdddd3268439e722d37d --- sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) +++ sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision 7a3067893b8133d0f47bbdddd3268439e722d37d) @@ -97,6 +97,7 @@ const char *Settings_Category_ConfigurationsDataList = "Configurations/DataList" ; const char *Settings_Category_Alarms = "Alarms/Alarms" ; const char *Settings_Category_Events = "Alarms/Events" ; + const char *Settings_Category_Rejects = "Alarms/Rejects" ; const char *Settings_Category_MessagesUnhandled = "Messages/Unhandled" ; const char *Settings_Category_SettingsSystem = "Settings/System" ; const char *Settings_Category_GenericConfirm = "Confirm/Confirm" ; Index: sources/storage/StorageGlobals.h =================================================================== diff -u -ra522e6aa7a36ac696a9a956200e89d838f319e25 -r7a3067893b8133d0f47bbdddd3268439e722d37d --- sources/storage/StorageGlobals.h (.../StorageGlobals.h) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) +++ sources/storage/StorageGlobals.h (.../StorageGlobals.h) (revision 7a3067893b8133d0f47bbdddd3268439e722d37d) @@ -60,6 +60,7 @@ extern const char *Settings_Category_ConfigurationsDataList ; extern const char *Settings_Category_Alarms ; extern const char *Settings_Category_Events ; + extern const char *Settings_Category_Rejects ; extern const char *Settings_Category_MessagesUnhandled ; extern const char *Settings_Category_SettingsSystem ; extern const char *Settings_Category_GenericConfirm ; Index: sources/view/VAdjustmentResponseBase.cpp =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -r7a3067893b8133d0f47bbdddd3268439e722d37d --- sources/view/VAdjustmentResponseBase.cpp (.../VAdjustmentResponseBase.cpp) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/view/VAdjustmentResponseBase.cpp (.../VAdjustmentResponseBase.cpp) (revision 7a3067893b8133d0f47bbdddd3268439e722d37d) @@ -16,9 +16,12 @@ // Project #include "GuiController.h" +#include "Settings.h" VIEW_DEF_CLASS(VAdjustmentResponseBase) -void View::VAdjustmentResponseBase::initConnections() { } +void View::VAdjustmentResponseBase::initConnections() { + ACTION_VIEW_CONNECTION(SettingsData); +} /*! * \brief View::VAdjustmentResponseBase::text @@ -28,7 +31,66 @@ QString View::VAdjustmentResponseBase::text() { QString text; - if (_adjustment_Reason != GuiRequestReasons::REQUEST_REJECT_REASON_NONE) - text = Gui::enumString(static_cast(_adjustment_Reason), "[%1] Unknown Error"); + if (_adjustment_Reason != GuiRequestReasons::REQUEST_REJECT_REASON_NONE) { + text = title(); + } return text; } + +/*! + * \brief View::VAdjustmentResponseBase::title + * \details The slot to get the Rejection Title + * \return Rejection Title as string + */ +QString View::VAdjustmentResponseBase::title () +{ + if ( ! _adjustment_Reason ) + return {}; + + QString s = _rejects[_adjustment_Reason].title; + + if ( ! s.isEmpty()) + return s; + else + return tr("Rejected") ; +} + +/*! + * \brief View::onActionReceive + * \details This function updates the reject structure defined here to be used on the AlarmDialogs, + * when the settings controller is done reading the Alarms.conf and signaling this class. + * \todo This function with the same one in VActiveAlarmList needs to be moved to a Controller Model structure, for a better performance and memory management. + */ +void View::VAdjustmentResponseBase::onActionReceive(const SettingsData &) { + QString category = Storage::Settings_Category_Rejects; + QStringList groups = _Settings.groups(category); + + for (const auto &group : groups) { + bool ok = true; + quint32 id = group.toInt( &ok ); + if ( ! ok ) { LOG_DEBUG(QString("Invalid Reject ID [%1]").arg(group)); continue; } + + RejectData rejectData; + InstructionData instructionData; + for (const QString &key : _Settings.keys(category, group)) { + if (Storage::Settings::isKeyTitle ( key ) ) { + rejectData.title = _Settings.value(category, group, key).toString(); + } else if (Storage::Settings::isKeyMessage ( key ) ) { + rejectData.message = _Settings.value(category, group, key).toString(); + } else { + instructionData[key] = _Settings.value(category, group, key).toString(); + rejectData.instructions = instructionData; + } + } + _rejects[id] = rejectData; + + /// DEBUG: + /// TODO: the MSettings model should do the same has been done here and use map instead of separate structure to iterate vertically, while map supports, keys, values. + /// qDebug() << "@TR: category:" << category << ":" << id << _rejects[id].title << _rejects[id].message << _rejects[id].instructions.keys() << _rejects[id].instructions.values(); + /// for (const auto &key : _rejects[id].instructions.keys()) { + /// qDebug() << "-" << key << _rejects[id].instructions.value(key); + /// } + } + + emit adjustment_ReasonTriggered (_adjustment_Reason); // to get the dialog content in sync with the Rejects.conf in case there is an early reject. +} Index: sources/view/VAdjustmentResponseBase.h =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -r7a3067893b8133d0f47bbdddd3268439e722d37d --- sources/view/VAdjustmentResponseBase.h (.../VAdjustmentResponseBase.h) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/view/VAdjustmentResponseBase.h (.../VAdjustmentResponseBase.h) (revision 7a3067893b8133d0f47bbdddd3268439e722d37d) @@ -26,6 +26,7 @@ #include "MTreatmentAdjustRequests.h" #include "MPostTreatmentAdjustRequests.h" #include "GuiGlobals.h" +#include "MSettings.h" // forward declarations class tst_views; @@ -48,6 +49,17 @@ // friends friend class ::tst_views; + + typedef QMap InstructionData; + struct RejectData { + QString title = ""; + QString message = ""; + InstructionData instructions; + bool hasInstruction() { return instructions.count(); } + }; + + QMap _rejects; + // disabled coco begin validated: // The adjustment_Reason property as quint32 is not used directly in GUI // it will be used as QString text. @@ -58,11 +70,14 @@ PROPERTY( bool , adjustment_Accepted , 0) - Q_PROPERTY(QString adjustment_ReasonText READ text NOTIFY adjustment_ReasonTriggered) - + Q_PROPERTY(QString adjustment_ReasonText READ text NOTIFY adjustment_ReasonTriggered) + VIEW_DEC_CLASS(VAdjustmentResponseBase) + VIEW_DEC_SLOT (SettingsData ) protected slots: - QString text(); + QString text (); + QString title (); + }; }