@@ -78,6 +78,27 @@ void ModbusLogModel::clear()
7878 endResetModel ();
7979}
8080
81+ // /
82+ // / \brief ModbusLogModel::setBufferingMode
83+ // / \param freeze
84+ // /
85+ void ModbusLogModel::setBufferingMode (bool freeze)
86+ {
87+ _bufferingMode = freeze;
88+ if (!_bufferingMode)
89+ {
90+ for (auto && data : _bufferingItems) {
91+ _items.push_back (data);
92+
93+ while (_items.size () >= _rowLimit) {
94+ _items.removeFirst ();
95+ }
96+ }
97+ _bufferingItems.clear ();
98+ update ();
99+ }
100+ }
101+
81102// /
82103// / \brief ModbusLogModel::append
83104// / \param data
@@ -86,16 +107,21 @@ void ModbusLogModel::append(QSharedPointer<const ModbusMessage> data)
86107{
87108 if (data == nullptr ) return ;
88109
89- while (rowCount () >= _rowLimit)
90- {
91- beginRemoveRows (QModelIndex (), 0 , 0 );
92- _items.removeFirst ();
93- endRemoveRows ();
110+ if (_bufferingMode) {
111+ _bufferingItems.push_back (data);
94112 }
113+ else {
114+ while (rowCount () >= _rowLimit)
115+ {
116+ beginRemoveRows (QModelIndex (), 0 , 0 );
117+ _items.removeFirst ();
118+ endRemoveRows ();
119+ }
95120
96- beginInsertRows (QModelIndex (), rowCount (), rowCount ());
97- _items.push_back (data);
98- endInsertRows ();
121+ beginInsertRows (QModelIndex (), rowCount (), rowCount ());
122+ _items.push_back (data);
123+ endInsertRows ();
124+ }
99125}
100126
101127// /
@@ -122,6 +148,7 @@ void ModbusLogModel::setRowLimit(int val)
122148void ModbusLogModel::deleteItems ()
123149{
124150 _items.clear ();
151+ _bufferingItems.clear ();
125152}
126153
127154// /
@@ -361,12 +388,11 @@ void ModbusLogWidget::setState(LogViewState state)
361388 _state = state;
362389 switch (state) {
363390 case Paused:
364- model ()-> blockSignals (true );
391+ ((ModbusLogModel*) model ())-> setBufferingMode (true );
365392 break ;
366393
367394 case Running:
368- model ()->blockSignals (false );
369- update ();
395+ ((ModbusLogModel*)model ())->setBufferingMode (false );
370396 break ;
371397
372398 default :
0 commit comments