#include "LogViewEnumEdit.hpp" #include "LogViewXdrStruct.hpp" #include "LogViewXdrValue.hpp" #include "LogViewField.hpp" #include "LogViewTelegram.hpp" namespace N_LogView { LogViewEnumEdit::LogViewEnumEdit(LogViewField* a_field, QWidget* a_parent, const bool a_readonly, const int a_index) : QComboBox(a_parent) , LogViewWidget(a_field, this, a_parent, a_readonly) { QString value = a_field->value(a_index); setToolTip(a_field->toolTipText()); bool bCurrentIndexSet = false; int i = 0; while (LogViewXdrValue* child = (static_cast(a_field->xdrElement()))->getChildAsValue(i++)) { QString enumText = LogViewField::makeClean(child->getName()); if (!a_readonly || enumText == value) { addItem(QStringLiteral("%1 (%2)").arg(enumText).arg(child->getValue()), QVariant::fromValue(child->getValue())); if (a_readonly) bCurrentIndexSet = true; } if (enumText == value) { setCurrentIndex(a_readonly ? 0 : i - 1); bCurrentIndexSet = true; if (!a_readonly || (0 != a_index)) updateToolTip(itemData(currentIndex()).toString()); } } if (!bCurrentIndexSet) { addItem(value); setCurrentIndex(findText(value)); } connect(this, QOverload::of(&LogViewEnumEdit::currentIndexChanged), this, &LogViewEnumEdit::checkAndOvertakeContent); } uint16_t LogViewEnumEdit::getSize() const { const LogViewXdrStruct* xdrStruct = static_cast(m_Field->xdrElement()); return xdrStruct->getEnumSize(); } void LogViewEnumEdit::checkAndOvertakeContent() { updateToolTip(itemData(currentIndex()).toString()); } bool LogViewEnumEdit::saveContent(LogViewTelegram* a_telegram) { bool ok; int value = itemData(currentIndex()).toInt(&ok); if (ok) { if (a_telegram->isJsonTelegram()) a_telegram->setJsonValue(m_Field->jsonPath(), value); else a_telegram->setUIntX(getSize(), value); return true; } return false; } }