Index: sources/device/DeviceView.cpp =================================================================== diff -u -rac9c658e925728918ccf010670d67f00fc0a8c08 -rb45c898bb2fef51abb9460a1306f07eaa8dcbab0 --- sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision ac9c658e925728918ccf010670d67f00fc0a8c08) +++ sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision b45c898bb2fef51abb9460a1306f07eaa8dcbab0) @@ -498,6 +498,12 @@ return true; } +QModelIndex View::VDevice::index(int vRow, int vColumn, const QModelIndex &vParent) const { + return hasIndex(vRow, vColumn, vParent) + ? createIndex(vRow, vColumn) + : QModelIndex(); +} + // ================================================= WifiInfo void VDevice::doInitWifiInfo() { wifiInfoRequest({}); Index: sources/device/DeviceView.h =================================================================== diff -u -rac9c658e925728918ccf010670d67f00fc0a8c08 -rb45c898bb2fef51abb9460a1306f07eaa8dcbab0 --- sources/device/DeviceView.h (.../DeviceView.h) (revision ac9c658e925728918ccf010670d67f00fc0a8c08) +++ sources/device/DeviceView.h (.../DeviceView.h) (revision b45c898bb2fef51abb9460a1306f07eaa8dcbab0) @@ -89,6 +89,7 @@ void dataAppend (const DataModel &vData , bool vFirst , bool vSecond); void dataClear ( ); bool setData (const QModelIndex &vIndex, const QVariant& vValue, int vRole = Qt::EditRole) override; + QModelIndex index (int vRow, int vColumn, const QModelIndex &vParent = QModelIndex()) const override; private: Index: sources/gui/qml/AlarmItem.qml =================================================================== diff -u -rac9c658e925728918ccf010670d67f00fc0a8c08 -rb45c898bb2fef51abb9460a1306f07eaa8dcbab0 --- sources/gui/qml/AlarmItem.qml (.../AlarmItem.qml) (revision ac9c658e925728918ccf010670d67f00fc0a8c08) +++ sources/gui/qml/AlarmItem.qml (.../AlarmItem.qml) (revision b45c898bb2fef51abb9460a1306f07eaa8dcbab0) @@ -42,7 +42,6 @@ readonly property alias backgroundColor: _alarmDialog.titleBarBackground readonly property alias textColor : _alarmDialog.textColor readonly property string title : vAlarmStatus.title - readonly property string message : vAlarmStatus.message readonly property alias isSilenced : vAlarmStatus.alarm_Flag_alarmsSilenced readonly property alias timeout : vAlarmStatus.alarm_MuteTimeout readonly property alias alarm_AlarmID : vAlarmStatus.alarm_AlarmID @@ -115,7 +114,6 @@ titleText : vAlarmStatus.title titlePixelSize : Fonts.fontPixelAlarmTitle - description : vAlarmStatus.message instructionModel : vAlarmStatus.instructionModel alarmID : vAlarmStatus.alarm_AlarmID isSilenced : vAlarmStatus.alarm_Flag_alarmsSilenced Index: sources/gui/qml/dialogs/NotificationDialog.qml =================================================================== diff -u -r71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b -rb45c898bb2fef51abb9460a1306f07eaa8dcbab0 --- sources/gui/qml/dialogs/NotificationDialog.qml (.../NotificationDialog.qml) (revision 71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b) +++ sources/gui/qml/dialogs/NotificationDialog.qml (.../NotificationDialog.qml) (revision b45c898bb2fef51abb9460a1306f07eaa8dcbab0) @@ -30,7 +30,6 @@ property alias titleText : _title.text property alias titlePixelSize : _title.font.pixelSize - property string description : "" property alias instructionModel : _listView.model property alias titleBarForeground : _title.color property alias titleBarBackground : _titleBar.color @@ -57,7 +56,7 @@ // 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 - visible : description && ! isSilenced + visible : ! isSilenced radius : Variables.alarmDialogRadius signal muteClicked() @@ -232,10 +231,10 @@ MouseArea { anchors.fill: parent onClicked: { -// if (_listView.currentIndex !== index) { + if (_listView.currentIndex !== index) { _listView.currentIndex = index _root.figureImageSource = model.image -// } + } } } } @@ -402,10 +401,9 @@ Connections { target: vAlarmStatus function onDidAlarmRaise ( ) { - // on new alarm reset to selection and image to step 1 + // 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) { - _listView.currentIndex = 0 - figureImageSource = _root.instructionModel.get(_listView.currentIndex).image + figureImageSource = _root.instructionModel.get(0).image } } } Index: sources/view/hd/alarm/VAlarmInstructionsModel.cpp =================================================================== diff -u -r71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b -rb45c898bb2fef51abb9460a1306f07eaa8dcbab0 --- sources/view/hd/alarm/VAlarmInstructionsModel.cpp (.../VAlarmInstructionsModel.cpp) (revision 71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b) +++ sources/view/hd/alarm/VAlarmInstructionsModel.cpp (.../VAlarmInstructionsModel.cpp) (revision b45c898bb2fef51abb9460a1306f07eaa8dcbab0) @@ -13,6 +13,10 @@ */ QHash View::VAlarmInstructionsModel::roleNames() const { + QHash _dataRoles { + { eRole_Instruction , "instruction" }, + { eRole_Image , "image" }, + }; return _dataRoles; } @@ -96,13 +100,18 @@ } /*! - * \brief Appends a row of data to the end of the model. - * \param[in] data The data to append. + * \brief Assignment operator + * \return A reference to this object. */ -void View::VAlarmInstructionsModel::appendData(const QHash &vData) +VAlarmInstructionsModel& View::VAlarmInstructionsModel::operator = (const QList> &src) { - int index = qBound(rowCount(), 0, rowCount()); - beginInsertRows(QModelIndex(), index, index); - _data.insert(rowCount(), vData); - endInsertRows(); + clear(); + + if (_data != src) + { + beginInsertRows(QModelIndex(), 0, src.count() - 1); + _data = src; + endInsertRows(); + } + return *this; } Index: sources/view/hd/alarm/VAlarmInstructionsModel.h =================================================================== diff -u -r71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b -rb45c898bb2fef51abb9460a1306f07eaa8dcbab0 --- sources/view/hd/alarm/VAlarmInstructionsModel.h (.../VAlarmInstructionsModel.h) (revision 71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b) +++ sources/view/hd/alarm/VAlarmInstructionsModel.h (.../VAlarmInstructionsModel.h) (revision b45c898bb2fef51abb9460a1306f07eaa8dcbab0) @@ -17,25 +17,21 @@ { Q_OBJECT - QHash _dataRoles { - { eRole_Instruction , "instruction" }, - { eRole_Image , "image" }, - }; - public: - typedef enum { + enum { eRole_Instruction = Qt::UserRole, eRole_Image , } DataRole; + Q_INVOKABLE QVariantMap get (int vRow ) const; // Exposed to QML + QHash roleNames ( ) const override; int rowCount (const QModelIndex & = QModelIndex() ) const override; QVariant data (const QModelIndex &vIndex, int vRole = Qt::DisplayRole ) const override; bool setData (const QModelIndex &vIndex, const QVariant& vValue, int vRole = Qt::EditRole) override; void clear ( ); - void appendData (const QHash &vData ); - Q_INVOKABLE QVariantMap get (int vRow ) const; // Exposed to QML + VAlarmInstructionsModel& operator = (const QList> &src); VIEW_DEC_CLASS_EX(VAlarmInstructionsModel, QAbstractListModel) Index: sources/view/hd/alarm/VAlarmStatus.cpp =================================================================== diff -u -r71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b -rb45c898bb2fef51abb9460a1306f07eaa8dcbab0 --- sources/view/hd/alarm/VAlarmStatus.cpp (.../VAlarmStatus.cpp) (revision 71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b) +++ sources/view/hd/alarm/VAlarmStatus.cpp (.../VAlarmStatus.cpp) (revision b45c898bb2fef51abb9460a1306f07eaa8dcbab0) @@ -154,13 +154,7 @@ || ( _alarm_Flag_alarmsSilencedChanged && ! _alarm_Flag_alarmsSilenced ) ){ - _alarmInstructionsList.clear(); - for (QMap::const_iterator it = _alarms[_alarm_AlarmID].instructions.constBegin(); - it != _alarms[_alarm_AlarmID].instructions.constEnd(); ++it) { - - _alarmInstructionsList.appendData( {{VAlarmInstructionsModel::eRole_Instruction, it.key() }, - {VAlarmInstructionsModel::eRole_Image, "file:" + it.value()}}); - } + _alarmInstructionsList = _alarms[_alarm_AlarmID].instructions; emit didAlarmRaise(); } } @@ -186,7 +180,6 @@ } QString VAlarmStatus::title () { if ( ! _alarm_AlarmID ) return {}; QString s = _alarms[_alarm_AlarmID].title ; if ( ! s.isEmpty()) return s; else return tr("Alarm") ; } -QString VAlarmStatus::message () { if ( ! _alarm_AlarmID ) return {}; QString s = _alarms[_alarm_AlarmID].message; if ( ! s.isEmpty()) return s; else return text() ; } /*! * \brief View::VAlarmStatus::onActionReceive @@ -207,16 +200,20 @@ for (const QString &key : _Settings.keys(category, group)) { if (Storage::Settings::isKeyTitle ( key ) ) { alarmData.title = _Settings.value(category, group, key).toString(); - } else if (Storage::Settings::isKeyMessage ( key ) ) { - alarmData.message = _Settings.value(category, group, key).toString(); } else { const QString imagePath = QStringLiteral("%1%2").arg(_location) .arg(_Settings.value(category, group, key).toString()); - instructionData[key] = QFile::exists(imagePath) ? imagePath : QStringLiteral("%1%2").arg(_location) - .arg("defaultImage.png"); + QHash instructionStep; + instructionStep.insert(VAlarmInstructionsModel::eRole_Instruction, key); + instructionStep.insert(VAlarmInstructionsModel::eRole_Image, QFile::exists(imagePath) ? "file:" + imagePath : + QStringLiteral("file:%1%2").arg(_location) + .arg("defaultImage.png")); + + instructionData.append(instructionStep); alarmData.instructions = instructionData; } } + _alarms[id] = alarmData; /// DEBUG: Index: sources/view/hd/alarm/VAlarmStatus.h =================================================================== diff -u -r71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b -rb45c898bb2fef51abb9460a1306f07eaa8dcbab0 --- sources/view/hd/alarm/VAlarmStatus.h (.../VAlarmStatus.h) (revision 71918fbc2b8b5c01cb0a348ffd3b83adbca79c9b) +++ sources/view/hd/alarm/VAlarmStatus.h (.../VAlarmStatus.h) (revision b45c898bb2fef51abb9460a1306f07eaa8dcbab0) @@ -50,7 +50,8 @@ const QString _location = QString(Storage::Settings_Category_AlarmsImagesLoc).arg(Storage::Settings_Path()); - typedef QMap InstructionData; + typedef QList> InstructionData; + struct AlarmData { QString title = ""; QString message = ""; @@ -82,7 +83,6 @@ // ********** STATIC PROPERTIES: The properties which need to be updated by each alarm message received. ********** // Q_PROPERTY(QString title READ title NOTIFY alarm_AlarmIDChanged ) - Q_PROPERTY(QString message READ message NOTIFY alarm_AlarmIDChanged ) Q_PROPERTY(QString text READ text NOTIFY alarm_AlarmIDChanged ) Q_PROPERTY(VAlarmInstructionsModel* instructionModel READ instructionModel NOTIFY alarm_AlarmIDChanged) @@ -95,7 +95,6 @@ private: QString title (); - QString message (); QString text (); QString alarmIDText (GuiAlarmID vEnum); VAlarmInstructionsModel* instructionModel() { return &_alarmInstructionsList; } ;