97 lines
2.8 KiB
C++
97 lines
2.8 KiB
C++
// **************************************************************************
|
|
//
|
|
// (C) Copyright 2009 Swiss SIMTEC AG
|
|
//
|
|
// **************************************************************************
|
|
//
|
|
// $HeadURL$
|
|
// $LastChangedBy$
|
|
// $LastChangedDate$
|
|
// $LastChangedRevision$
|
|
//
|
|
// **************************************************************************
|
|
|
|
#include "LogViewTextEdit.hpp"
|
|
#include "LogViewField.hpp"
|
|
#include "LogViewTelegram.hpp"
|
|
|
|
namespace N_LogView
|
|
{
|
|
|
|
// ---------------------------------------------------------------
|
|
LogViewTextEdit::LogViewTextEdit(LogViewField* a_field, QWidget* a_parent, const bool a_readonly)
|
|
: QLineEdit(a_parent)
|
|
, LogViewWidget(a_field, this, a_parent, a_readonly)
|
|
{
|
|
const QString value = a_field->value(0);
|
|
setText(value);
|
|
|
|
if (a_readonly)
|
|
{
|
|
setReadOnly(true);
|
|
setAlignment(a_field->isRightAligned() ? Qt::AlignRight : Qt::AlignLeft);
|
|
}
|
|
|
|
// set a validator for number of chars
|
|
uint16_t maxArraySize = a_field->maxArraySize();
|
|
setMaxLength(maxArraySize);
|
|
updateToolTip(value);
|
|
|
|
// make proper width of widget
|
|
QFontMetrics fm(font());
|
|
#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
|
|
setMinimumWidth(fm.width(QLatin1Char(' ') + value + QLatin1Char(' ')));
|
|
#else
|
|
setMinimumWidth(fm.horizontalAdvance(QLatin1Char(' ') + value + QLatin1Char(' ')));
|
|
#endif
|
|
|
|
// connect signals
|
|
connect(this, &LogViewTextEdit::editingFinished,
|
|
this, &LogViewTextEdit::checkAndOvertakeContent);
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------
|
|
void LogViewTextEdit::checkAndOvertakeContent()
|
|
{
|
|
updateToolTip(text()); // fixme nach jedem zeichen updaten
|
|
m_Valid = true;
|
|
}
|
|
|
|
// ---------------------------------------------------------------
|
|
// Writes the content into telegram.
|
|
// Returns true if successful.
|
|
// ---------------------------------------------------------------
|
|
bool LogViewTextEdit::saveContent(LogViewTelegram* a_telegram)
|
|
{
|
|
if (!isValid())
|
|
return false;
|
|
if (a_telegram->isJsonTelegram())
|
|
{
|
|
a_telegram->setJsonValue(m_Field->jsonPath(), text());
|
|
}
|
|
else
|
|
{
|
|
uint16_t size = getSize();
|
|
QString content = text();
|
|
uint16_t arraySize;
|
|
if (m_Field->isDynamicArray())
|
|
{
|
|
arraySize = content.length();
|
|
a_telegram->setUIntX(LogViewTelegram::SIZE_CENTRAL_DYN_ARRAY_SIZE, arraySize);
|
|
// fixme: bei vielen Telegrammen muss Länge auf die Länge des Textes gesetzt werden. Dies kann nicht automatisch gemacht werden. Aber vielleicht kann man schauen, ob vor dem dyn. Array ein Feld Länge vorkommt, oder hartcodieren, oder konfigurierbaren
|
|
}
|
|
else
|
|
{
|
|
arraySize = m_Field->maxArraySize();
|
|
}
|
|
|
|
// copy the text
|
|
for (int i = 0; i < arraySize; i++)
|
|
a_telegram->setUIntX(size, i < content.length() ? content[i].toLatin1() : 0);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
} // namespace N_LogView
|