/** * @RDE_HEADER@ * HMI Plugin for ParticipantManagement - Party Overview Model * $Id$ * $HeadURL$ * $Author$ * Created by Patric Karwat, SLSE, 2016-11-11 */ #include "ppm_party_model.h" #include #include #include #include #include #include #include namespace ParticipantManagement { //--------------------------------- // PartyModel //--------------------------------- PartyModel::PartyModel(QObject *parent) : LtsWidgets::LtsAbstractTableModel({tr("Id"), tr("Name"), tr("Color"), tr("Faded Color"), tr("Role"), tr("Is Used"), tr("Is SAA connected"), tr("SAA Name"), tr("Szenar Name")}, parent) , m_ppmDtc(nullptr) , m_logger(getLogger("PartyModel")) {} bool PartyModel::initModel(LtsSession::LtsSession *session) { m_session = session; if (!m_session->getDtc(m_ppmDtc)) { ERROR_LOG(m_logger)<<" Couldn't load ppmDtc!!! "; return false; } if (!m_session->getDtc(m_opmDtc)) { ERROR_LOG(m_logger)<<" Couldn't load opmDtc!!! "; return false; } connect(m_ppmDtc.get(), &ParticipantManagement::Interface::Dtc::partyChanged , this, &PartyModel::onDataChanged); m_operatorId = LtsSessionData::LtsSessionData::getInstance()->getOperatorId(); m_ppmDtc->partys([this](const ParticipantManagement::Party &party) { if (hasParty(party)) // opm_operator_exercise -> visible_parties insertRow(party); }); return true; } QVariant PartyModel::data(const QModelIndex &index, int role) const { if (!indexIsValid(index)) return QVariant(); const ParticipantManagement::Party &party = m_vecData.at(index.row()); if (role == Qt::BackgroundRole) { switch(index.column()) { case Color: return QColor::fromRgb(QRgb(party.color())); case FadedColor: return QColor::fromRgb(QRgb(party.fadingColor())); } } if (role == Qt::DisplayRole) { switch (index.column()) { case Id: return party.id(); case Name: return ParticipantManagement::trPartyName(party.name()); case Color: return QVariant(); case FadedColor: return QVariant(); case Role: return ParticipantManagement::toString(party.role()); case IsUsedBy: return party.isUsedBy() ? tr("Yes") : tr("No"); case IsSaaConnected: { if ( party.properties().empty()) return false; ParticipantManagement::ConnectState status = m_ppmDtc->saaConnectedState(party.id()); QString connectState; switch (status.underlying()) { case ParticipantManagement::ConnectState::Undefined: connectState = QStringLiteral(""); break; default: connectState = ParticipantManagement::toString(status); break; } return connectState; } case SaaName: { if ( party.properties().empty()) return QString{}; const QJsonObject properties(QJsonDocument::fromJson(QByteArray::fromStdString(party.properties())).object()); if (!properties.contains(QStringLiteral("Adler")) ) return QString{}; const QJsonObject adlerObj = properties[QStringLiteral("Adler")].toObject(); QString saaName; if (adlerObj.contains(QStringLiteral("saaName")) ) saaName.append(adlerObj[QStringLiteral("saaName")].toString()); if (adlerObj.contains(QStringLiteral("isVerbund")) && !saaName.isEmpty()) saaName.append(QStringLiteral(" (") + (adlerObj[QStringLiteral("isVerbund")].toBool() ? tr("Verbund") : tr("Standalone")) + QStringLiteral(")")); return saaName; } case SzenarName: { if ( party.properties().empty()) return QString{}; const QJsonObject properties(QJsonDocument::fromJson(QByteArray::fromStdString(party.properties())).object()); if (!properties.contains(QStringLiteral("Adler")) ) return QString{}; const QJsonObject adlerObj = properties[QStringLiteral("Adler")].toObject(); if (adlerObj.contains(QStringLiteral("szenarName")) ) return adlerObj[QStringLiteral("szenarName")].toString(); return QString{}; } } } return QVariant(); } bool PartyModel::hasParty(const Party &party) const { const auto visiblePartiesByExercise = m_opmDtc->user(m_operatorId).visiblePartiesByExercise(); for (const auto &exerciseParties : visiblePartiesByExercise) { if (exerciseParties.exerciseId() != m_session->exerciseId()) continue; if (!exerciseParties.visibleParties().is_set()) //has_value not support on windows yet so we need depricated is_set return false; for (const auto &partyId : exerciseParties.visibleParties().get()) if (partyId == party.id()) return true; return false; } return false; } bool PartyModel::isPartyHidden(const Party &party) const { const auto visiblePartiesByExercise = m_opmDtc->user(m_operatorId).visiblePartiesByExercise(); for (const auto &exerciseParties : visiblePartiesByExercise) { if (exerciseParties.exerciseId() != m_session->exerciseId()) continue; if (!exerciseParties.hiddenParties().is_set()) //has_value not support on windows yet so we need depricated is_set return false; for (const auto &partyId : exerciseParties.hiddenParties().get()) if (partyId == party.id()) return true; return false; } return false; } } // namespace ParticipantManagement