Files
qt5-legatus-legacy/Lts/Plugins/AudioVideoManagement/Gui/AVMenuEdit/avm_menu_view_model.cpp
T
2026-08-13 18:33:10 +02:00

158 lines
5.0 KiB
C++
Executable File

/**
* @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 <FileManagement/flm_translation.h>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
namespace AudioVideoManagement
{
//---------------------------------
// MenuViewModel
//---------------------------------
MenuViewModel::MenuViewModel(QObject *parent)
: LtsWidgets::LtsAbstractTableModel<AudioVideoManagement::MenuStruct>({tr("Id"),
tr("Name")},
parent)
, m_isAudio(false)
, m_dtc(nullptr)
, m_logger(getLogger("MenuViewModel"))
{}
bool MenuViewModel::initModel(const std::shared_ptr<AudioVideoManagement::Interface::Dtc> &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<AudioVideoManagement::MenuStruct> MenuViewModel::jsonToMenuStructs(const QByteArray &content) const
{
// already checked that content is not empty, parseable and contains proper XmlType
QVector<AudioVideoManagement::MenuStruct> 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