/** * @RDE_HEADER@ * HMI Plugin for AudioVideoManagement - Weather Station Overview Dialog Model * $Id$ * $HeadURL$ * $Author$ * Created by Patric Karwat, SLSE, 2016-10.05 */ #include "avm_menu_view_model.h" #include #include #include #include namespace AudioVideoManagement { //--------------------------------- // MenuViewModel //--------------------------------- MenuViewModel::MenuViewModel(QObject *parent) : LtsWidgets::LtsAbstractTableModel({tr("Id"), tr("Name")}, parent) , m_isAudio(false) , m_dtc(nullptr) , m_logger(getLogger("MenuViewModel")) {} bool MenuViewModel::initModel(const std::shared_ptr &dtc, bool isAudio) { m_isAudio = isAudio; m_dtc = dtc; connect(m_dtc.get(), &AudioVideoManagement::Interface::Dtc::menuStructChanged, this, &MenuViewModel::onDataChanged); // insert Model m_dtc->menuStructs([this](const AudioVideoManagement::MenuStruct &ms) { insertRow(ms); }); return true; } QVariant MenuViewModel::data(const QModelIndex &index, int role) const { if (role != Qt::DisplayRole || !indexIsValid(index)) return QVariant(); const AudioVideoManagement::MenuStruct &ms = m_vecData.at(index.row()); switch (index.column()) { case 0: return ms.id(); case 1: return QString::fromStdString(ms.name()); default: break; } return QVariant(); } bool MenuViewModel::isFiltered(const MenuStruct &data, DataModification modType) const { Q_UNUSED(modType); if (data.isAudio() != m_isAudio) return true; if (data.isDefault()) return true; return false; } QByteArray MenuViewModel::modelToJson(int row) const { if (row < 0 || row >= m_vecData.size()) return QByteArray("{}"); QJsonObject obj; obj[QStringLiteral("XmlType")] = FileManagement::toString(FileManagement::XmlType::AVMMenuEditView); DEBUG_LOG(m_logger) << "row =" << ": " << row; const AudioVideoManagement::MenuStruct &menuStruct = m_vecData.at(row); obj[QStringLiteral("id")] = 0; obj[QStringLiteral("isAudio")] = menuStruct.isAudio(); obj[QStringLiteral("isDefault")] = menuStruct.isDefault(); obj[QStringLiteral("name")] = QString::fromStdString(menuStruct.name()); //menuStruct.menuEntries(): QJsonArray arrData; for (const AudioVideoManagement::AvMenuEntry &avMenuEntry : menuStruct.menuEntries()) { QJsonObject innerData; innerData[QStringLiteral("id")] = avMenuEntry.id(); innerData[QStringLiteral("isGroup")] = avMenuEntry.isGroup(); if (avMenuEntry.mountingPointId().is_set()) innerData[QStringLiteral("mountingPointId")] = avMenuEntry.mountingPointId().get(); if (avMenuEntry.name().is_set()) innerData[QStringLiteral("name")] = QString::fromStdString(avMenuEntry.name().get()); innerData[QStringLiteral("parentId")] = avMenuEntry.parentId(); innerData[QStringLiteral("rowId")] = avMenuEntry.rowId(); arrData += innerData; } obj[QStringLiteral("menuEntries")] = arrData; QJsonDocument doc(obj); return doc.toJson(QJsonDocument::Compact); } QVector MenuViewModel::jsonToMenuStructs(const QByteArray &content) const { // already checked that content is not empty, parseable and contains proper XmlType QVector result; AudioVideoManagement::MenuStruct menuStruct; const QJsonDocument doc(QJsonDocument::fromJson(content)); const QJsonObject obj(doc.object()); menuStruct.id(0); menuStruct.isAudio(obj[QStringLiteral("isAudio")].toBool()); menuStruct.isDefault(obj[QStringLiteral("isDefault")].toBool()); menuStruct.name(obj[QStringLiteral("name")].toString().toStdString()); // Start menuStruct.menuEntries(): const QJsonArray arrEntry(obj.value(QStringLiteral("menuEntries")).toArray()); menuStruct.menuEntries().resize(arrEntry.size()); INFO_LOG(m_logger) << "arrEntry.size()=" << arrEntry.size(); for (int j = 0; j < arrEntry.size(); ++j) { const QJsonObject objEntry(arrEntry.at(j).toObject()); AudioVideoManagement::AvMenuEntry avMenuEntry; avMenuEntry.id(-10000000 + objEntry[QStringLiteral("id")].toInt()); avMenuEntry.isGroup(objEntry[QStringLiteral("isGroup")].toBool()); avMenuEntry.mountingPointId(objEntry[QStringLiteral("mountingPointId")].toInt()); if (objEntry.contains(QStringLiteral("name"))) avMenuEntry.name().set(objEntry[QStringLiteral("name")].toString().toStdString()); if (objEntry[QStringLiteral("isGroup")].toBool()) avMenuEntry.parentId(0); else avMenuEntry.parentId(-10000000 + objEntry[QStringLiteral("parentId")].toInt()); avMenuEntry.rowId(objEntry[QStringLiteral("rowId")].toInt()); menuStruct.menuEntries()[j] = avMenuEntry; } // End menuStruct.menuEntries(): result.append(menuStruct); return result; } } // namespace AudioVideoManagement