#include "LogViewValueEdit.hpp" #include "LogViewField.hpp" #include "LogViewTelegram.hpp" namespace N_LogView { LogViewValueEdit::LogViewValueEdit(LogViewField* a_field, QWidget* a_parent, const bool a_readonly) : QLineEdit(a_parent) , LogViewWidget(a_field, this, a_parent, a_readonly) , m_IsFloat(false) { const LogViewXdrStandardType *stdType = static_cast(m_Field->xdrElement()); m_IsFloat = (LogViewXdrStandardType::e_Float == stdType->getValueKind()); const QString valueText = a_field->value(0); setText(valueText); updateToolTip(valueText); QFontMetrics fm(font()); #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) setMinimumWidth(fm.width(QLatin1Char(' ') + valueText + QLatin1Char(' '))); #else setMinimumWidth(fm.horizontalAdvance(QLatin1Char(' ') + valueText + QLatin1Char(' '))); #endif if (a_readonly) { setReadOnly(true); setAlignment(a_field->isRightAligned() ? Qt::AlignRight : Qt::AlignLeft); } else { connect(this, &LogViewValueEdit::editingFinished, this, &LogViewValueEdit::checkAndOvertakeContent); } } void LogViewValueEdit::checkAndOvertakeContent() { bool ok; int64_t intValue = 0; double floatValue = 0.0; if (m_IsFloat) floatValue = getFloat(text(), (uint64_t&)intValue, ok); else intValue = getInteger(text(), ok); if (!ok) { setFocus(); selectAll(); return; } if (m_IsFloat) setText(QString::number(floatValue)); else setText(QString::number(intValue)); updateToolTip(text()); } bool LogViewValueEdit::saveContent(LogViewTelegram* a_telegram) { if (m_Valid) { bool ok; if (m_IsFloat) { uint64_t valueAsUint64; const double value = getFloat(text(), valueAsUint64, ok); if (ok) { if (a_telegram->isJsonTelegram()) { a_telegram->setJsonValue(m_Field->jsonPath(), value); } else { const LogViewXdrStandardType *stdType = static_cast(m_Field->xdrElement()); LogViewXdrStandardType::E_ByteOrder byteOrder = stdType->getByteOrder(); a_telegram->setUIntX(getSize(), valueAsUint64, byteOrder); } return true; } } else { qint64 intValue = getInteger(text(), ok); if (ok) { if (a_telegram->isJsonTelegram()) a_telegram->setJsonValue(m_Field->jsonPath(), intValue); else a_telegram->setUIntX(getSize(), intValue); return true; } } } return false; } }