Skip to content

Commit db0959e

Browse files
committed
Added display definition 'show leading zeros for unsigned values'
1 parent e90c16e commit db0959e

15 files changed

Lines changed: 459 additions & 361 deletions

omodsim/controls/bytelisttextedit.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,17 @@ void ByteListTextEdit::setValue(const QByteArray& value)
7070
{
7171
case DecMode:
7272
{
73-
const auto text = formatUInt8Array(DataDisplayMode::UInt16, value);
73+
const auto text = formatUInt8Array(DataDisplayMode::UInt16, true, value);
7474
if(text != toPlainText())
75-
setPlainText(formatUInt8Array(DataDisplayMode::UInt16, value));
75+
setPlainText(formatUInt8Array(DataDisplayMode::UInt16, true, value));
7676
}
7777
break;
7878

7979
case HexMode:
8080
{
81-
const auto text = formatUInt8Array(DataDisplayMode::Hex, value);
81+
const auto text = formatUInt8Array(DataDisplayMode::Hex, true, value);
8282
if(text != toPlainText())
83-
setPlainText(formatUInt8Array(DataDisplayMode::Hex, value));
83+
setPlainText(formatUInt8Array(DataDisplayMode::Hex, true, value));
8484
}
8585
break;
8686
}

omodsim/controls/modbuslogwidget.cpp

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ QVariant ModbusLogModel::data(const QModelIndex& index, int role) const
5959
.arg(item->timestamp().toString(Qt::ISODateWithMs),
6060
item->isRequest() ? "#0066cc" : "#009933",
6161
item->isRequest() ? "[Tx] ←" : "[Rx] →",
62-
item->toString(_parentWidget->dataDisplayMode()));
62+
item->toString(_parentWidget->dataDisplayMode(), _parentWidget->showLeadingZeros()));
6363

6464
case Qt::UserRole:
6565
return QVariant::fromValue(item);
@@ -158,6 +158,7 @@ void ModbusLogModel::deleteItems()
158158
ModbusLogWidget::ModbusLogWidget(QWidget* parent)
159159
: QListView(parent)
160160
, _autoscroll(false)
161+
, _showLeadingZeros(true)
161162
{
162163
setFocusPolicy(Qt::StrongFocus);
163164
setFont(defaultMonospaceFont());
@@ -195,7 +196,7 @@ ModbusLogWidget::ModbusLogWidget(QWidget* parent)
195196
QModelIndex index = currentIndex();
196197
if (index.isValid()) {
197198
auto msg = index.data(Qt::UserRole).value<QSharedPointer<const ModbusMessage>>();
198-
if (msg) QApplication::clipboard()->setText(msg->toString(dataDisplayMode()));
199+
if (msg) QApplication::clipboard()->setText(msg->toString(dataDisplayMode(), _showLeadingZeros));
199200
}
200201
});
201202

@@ -298,6 +299,27 @@ void ModbusLogWidget::setDataDisplayMode(DataDisplayMode mode)
298299
}
299300
}
300301

302+
///
303+
/// \brief ModbusLogWidget::showLeadingZeros
304+
/// \return
305+
///
306+
bool ModbusLogWidget::showLeadingZeros() const
307+
{
308+
return _showLeadingZeros;
309+
}
310+
311+
///
312+
/// \brief ModbusLogWidget::setShowLeadingZeros
313+
/// \param value
314+
///
315+
void ModbusLogWidget::setShowLeadingZeros(bool value)
316+
{
317+
_showLeadingZeros = value;
318+
if(model()) {
319+
((ModbusLogModel*)model())->update();
320+
}
321+
}
322+
301323
///
302324
/// \brief ModbusLogWidget::rowLimit
303325
/// \return

omodsim/controls/modbuslogwidget.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ class ModbusLogWidget : public QListView
6666
DataDisplayMode dataDisplayMode() const;
6767
void setDataDisplayMode(DataDisplayMode mode);
6868

69+
bool showLeadingZeros() const;
70+
void setShowLeadingZeros(bool value);
71+
6972
int rowLimit() const;
7073
void setRowLimit(int val);
7174

@@ -90,6 +93,7 @@ private slots:
9093
QAction* _copyBytesAct;
9194
LogViewState _state = LogViewState::Running;
9295
DataDisplayMode _dataDisplayMode;
96+
bool _showLeadingZeros = true;
9397
};
9498

9599
#endif // MODBUSLOGWIDGET_H

omodsim/controls/modbusmessagewidget.cpp

Lines changed: 111 additions & 91 deletions
Large diffs are not rendered by default.

omodsim/controls/modbusmessagewidget.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ class ModbusMessageWidget : public QListWidget
2727
bool showTimestamp() const;
2828
void setShowTimestamp(bool on);
2929

30+
bool showLeadingZeros() const;
31+
void setShowLeadingZeros(bool value);
32+
3033
void setStatusColor(const QColor& clr);
3134

3235
QColor backgroundColor() const;
@@ -45,6 +48,7 @@ private slots:
4548
QColor _statusClr;
4649
ByteOrder _byteOrder;
4750
DataDisplayMode _dataDisplayMode;
51+
bool _showLeadingZeros;
4852
bool _showTimestamp;
4953
QAction* _copyAct;
5054
QAction* _copyValuesAct;

omodsim/controls/outputwidget.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ void OutputListModel::updateData(const QModbusDataUnit& data)
191191
_lastData = data;
192192

193193
const auto mode = _parentWidget->dataDisplayMode();
194+
const auto leadingZeros = _parentWidget->_displayDefinition.LeadingZeros;
194195
const auto pointType = _parentWidget->_displayDefinition.PointType;
195196
const auto byteOrder = *_parentWidget->byteOrder();
196197
const auto codepage = _parentWidget->codepage();
@@ -209,7 +210,7 @@ void OutputListModel::updateData(const QModbusDataUnit& data)
209210
break;
210211

211212
case DataDisplayMode::UInt16:
212-
itemData.ValueStr = formatUInt16Value(pointType, value, byteOrder, itemData.Value);
213+
itemData.ValueStr = formatUInt16Value(pointType, value, byteOrder, leadingZeros, itemData.Value);
213214
break;
214215

215216
case DataDisplayMode::Int16:
@@ -255,12 +256,12 @@ void OutputListModel::updateData(const QModbusDataUnit& data)
255256
break;
256257

257258
case DataDisplayMode::UInt32:
258-
itemData.ValueStr = formatUInt32Value(pointType, value, _lastData.value(i+1), byteOrder,
259+
itemData.ValueStr = formatUInt32Value(pointType, value, _lastData.value(i+1), byteOrder, leadingZeros,
259260
(i%2) || (i+1>=rowCount()), itemData.Value);
260261
break;
261262

262263
case DataDisplayMode::SwappedUInt32:
263-
itemData.ValueStr = formatUInt32Value(pointType, _lastData.value(i+1), value, byteOrder,
264+
itemData.ValueStr = formatUInt32Value(pointType, _lastData.value(i+1), value, byteOrder, leadingZeros,
264265
(i%2) || (i+1>=rowCount()), itemData.Value);
265266
break;
266267

@@ -276,12 +277,12 @@ void OutputListModel::updateData(const QModbusDataUnit& data)
276277

277278
case DataDisplayMode::UInt64:
278279
itemData.ValueStr = formatUInt64Value(pointType, value, _lastData.value(i+1), _lastData.value(i+2), _lastData.value(i+3),
279-
byteOrder, (i%4) || (i+3>=rowCount()), itemData.Value);
280+
byteOrder, leadingZeros, (i%4) || (i+3>=rowCount()), itemData.Value);
280281
break;
281282

282283
case DataDisplayMode::SwappedUInt64:
283284
itemData.ValueStr = formatUInt64Value(pointType, _lastData.value(i+3), _lastData.value(i+2), _lastData.value(i+1), value,
284-
byteOrder, (i%4) || (i+3>=rowCount()), itemData.Value);
285+
byteOrder, leadingZeros, (i%4) || (i+3>=rowCount()), itemData.Value);
285286
break;
286287
}
287288
}
@@ -391,6 +392,8 @@ void OutputWidget::setup(const DisplayDefinition& dd, const ModbusSimulationMap2
391392
setLogViewLimit(dd.LogViewLimit);
392393
setAutosctollLogView(dd.AutoscrollLog);
393394
setDataViewColumnsDistance(dd.DataViewColumnsDistance);
395+
ui->logView->setShowLeadingZeros(dd.LeadingZeros);
396+
ui->modbusMsg->setShowLeadingZeros(dd.LeadingZeros);
394397

395398
_listModel->clear();
396399

@@ -958,7 +961,7 @@ void OutputWidget::updateLogView(QSharedPointer<const ModbusMessage> msg)
958961
(msg->isRequest()? "Tx" : "Rx"),
959962
msg->timestamp().toString(Qt::ISODateWithMs),
960963
(msg->isRequest()? "<<" : ">>"),
961-
msg->toString(DataDisplayMode::Hex));
964+
msg->toString(DataDisplayMode::Hex, _displayDefinition.LeadingZeros));
962965
captureString(str);
963966
}
964967
}

omodsim/dialogs/dialogdisplaydefinition.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ DialogDisplayDefinition::DialogDisplayDefinition(DisplayDefinition dd, QWidget*
2020

2121
ui->comboBoxColumnsDistance->setValidator(new QUIntValidator(1, 32, this));
2222
ui->comboBoxColumnsDistance->setEditText(QString::number(dd.DataViewColumnsDistance));
23+
ui->checkBoxLeadingZeros->setChecked(dd.LeadingZeros);
2324

2425
ui->lineEditPointAddress->setInputMode(dd.HexAddress ? NumericLineEdit::HexMode : NumericLineEdit::Int32Mode);
2526
ui->lineEditPointAddress->setInputRange(ModbusLimits::addressRange(dd.AddrSpace, dd.ZeroBasedAddress));
@@ -62,6 +63,7 @@ void DialogDisplayDefinition::accept()
6263
_displayDefinition.VerboseLogging = ui->checkBoxVerboseLogging->isChecked();
6364
_displayDefinition.ZeroBasedAddress = (ui->comboBoxAddressBase->currentAddressBase() == AddressBase::Base0);
6465
_displayDefinition.DataViewColumnsDistance = ui->comboBoxColumnsDistance->currentText().toUInt();
66+
_displayDefinition.LeadingZeros = ui->checkBoxLeadingZeros->isChecked();
6567

6668
QFixedSizeDialog::accept();
6769
}

omodsim/dialogs/dialogdisplaydefinition.ui

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>384</width>
10-
<height>514</height>
10+
<height>531</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -128,6 +128,13 @@
128128
</item>
129129
</widget>
130130
</item>
131+
<item row="1" column="0" colspan="2">
132+
<widget class="QCheckBox" name="checkBoxLeadingZeros">
133+
<property name="text">
134+
<string>Show leading zeros for unsigned values</string>
135+
</property>
136+
</widget>
137+
</item>
131138
</layout>
132139
</widget>
133140
</item>

omodsim/displaydefinition.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ struct DisplayDefinition
2323
bool VerboseLogging = true;
2424
AddressSpace AddrSpace;
2525
quint16 DataViewColumnsDistance = 16;
26+
bool LeadingZeros = true;
2627

2728
void normalize()
2829
{
@@ -51,6 +52,7 @@ inline QSettings& operator <<(QSettings& out, const DisplayDefinition& dd)
5152
out.setValue("DisplayDefinition/Length", dd.Length);
5253
out.setValue("DisplayDefinition/LogViewLimit", dd.LogViewLimit);
5354
out.setValue("DisplayDefinition/DataViewColumnSpace", dd.DataViewColumnsDistance);
55+
out.setValue("DisplayDefinition/LeadingZeros", dd.LeadingZeros);
5456
out.setValue("DisplayDefinition/ZeroBasedAddress", dd.ZeroBasedAddress);
5557
out.setValue("DisplayDefinition/HexAddress", dd.HexAddress);
5658
out.setValue("DisplayDefinition/AutoscrollLog", dd.AutoscrollLog);
@@ -75,6 +77,7 @@ inline QSettings& operator >>(QSettings& in, DisplayDefinition& dd)
7577
dd.Length = in.value("DisplayDefinition/Length", 100).toUInt();
7678
dd.LogViewLimit = in.value("DisplayDefinition/LogViewLimit", 30).toUInt();
7779
dd.DataViewColumnsDistance = in.value("DisplayDefinition/DataViewColumnSpace", 16).toUInt();
80+
dd.LeadingZeros = in.value("DisplayDefinition/LeadingZeros").toBool();
7881
dd.ZeroBasedAddress = in.value("DisplayDefinition/ZeroBasedAddress").toBool();
7982
dd.HexAddress = in.value("DisplayDefinition/HexAddress").toBool();
8083
dd.AutoscrollLog = in.value("DisplayDefinition/AutoscrollLog").toBool();
@@ -103,6 +106,7 @@ inline QXmlStreamWriter& operator <<(QXmlStreamWriter& xml, const DisplayDefinit
103106
xml.writeAttribute("AutoscrollLog", boolToString(dd.AutoscrollLog));
104107
xml.writeAttribute("VerboseLogging", boolToString(dd.VerboseLogging));
105108
xml.writeAttribute("DataViewColumnsDistance", QString::number(dd.DataViewColumnsDistance));
109+
xml.writeAttribute("LeadingZeros", boolToString(dd.LeadingZeros));
106110
xml.writeEndElement();
107111

108112
return xml;
@@ -164,6 +168,10 @@ inline QXmlStreamReader& operator >>(QXmlStreamReader& xml, DisplayDefinition& d
164168
if (ok) dd.DataViewColumnsDistance = distance;
165169
}
166170

171+
if (attributes.hasAttribute("LeadingZeros")) {
172+
dd.LeadingZeros = stringToBool(attributes.value("LeadingZeros").toString());
173+
}
174+
167175
xml.skipCurrentElement();
168176

169177
dd.normalize();

0 commit comments

Comments
 (0)