158 lines
5.0 KiB
C++
Executable File
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
|