diff --git a/client/port.h b/client/port.h index 281a61a..4c8f292 100644 --- a/client/port.h +++ b/client/port.h @@ -98,6 +98,8 @@ public: { return d.is_exclusive_control(); } OstProto::TransmitMode transmitMode() { return d.transmit_mode(); } + bool trackStreamStats() + { return d.track_stream_stats(); } double averagePacketRate() { return avgPacketsPerSec_; } double averageBitRate() diff --git a/client/portconfigdialog.cpp b/client/portconfigdialog.cpp index 96028fd..466a46d 100644 --- a/client/portconfigdialog.cpp +++ b/client/portconfigdialog.cpp @@ -67,10 +67,12 @@ PortConfigDialog::PortConfigDialog( qDebug("reservedBy_ = %d", reservedBy_); exclusiveControlButton->setChecked(portConfig_.is_exclusive_control()); + streamStatsButton->setChecked(portConfig_.track_stream_stats()); // Disable UI elements based on portState if (portState.is_transmit_on()) { transmitModeBox->setDisabled(true); + streamStatsButton->setDisabled(true); } } @@ -103,6 +105,7 @@ void PortConfigDialog::accept() } pc.set_is_exclusive_control(exclusiveControlButton->isChecked()); + pc.set_track_stream_stats(streamStatsButton->isChecked()); // Update fields that have changed, clear the rest if (pc.transmit_mode() != portConfig_.transmit_mode()) @@ -120,5 +123,10 @@ void PortConfigDialog::accept() else portConfig_.clear_is_exclusive_control(); + if (pc.track_stream_stats() != portConfig_.track_stream_stats()) + portConfig_.set_track_stream_stats(pc.track_stream_stats()); + else + portConfig_.clear_track_stream_stats(); + QDialog::accept(); } diff --git a/client/portconfigdialog.ui b/client/portconfigdialog.ui index 14ded8f..95b5a8d 100644 --- a/client/portconfigdialog.ui +++ b/client/portconfigdialog.ui @@ -69,6 +69,13 @@ + + + + Stream Statistics + + + diff --git a/client/portswindow.cpp b/client/portswindow.cpp index c1bb4b7..0cef08e 100644 --- a/client/portswindow.cpp +++ b/client/portswindow.cpp @@ -726,6 +726,7 @@ void PortsWindow::on_actionPort_Configuration_triggered() // which says copy only modifiable fields //plm->port(current).protoDataCopyInto(&config); config.set_transmit_mode(port.transmitMode()); + config.set_track_stream_stats(port.trackStreamStats()); config.set_is_exclusive_control(port.hasExclusiveControl()); config.set_user_name(port.userName().toStdString()); diff --git a/server/abstractport.cpp b/server/abstractport.cpp index 977908a..d9d28c7 100644 --- a/server/abstractport.cpp +++ b/server/abstractport.cpp @@ -78,6 +78,12 @@ bool AbstractPort::canModify(const OstProto::Port &port, bool *dirty) allow = !isTransmitOn(); } + if (port.has_track_stream_stats() + && (port.track_stream_stats() != data_.track_stream_stats())) { + *dirty = true; + allow = !isTransmitOn(); + } + return allow; } @@ -98,6 +104,9 @@ bool AbstractPort::modify(const OstProto::Port &port) if (port.has_transmit_mode()) data_.set_transmit_mode(port.transmit_mode()); + if (port.has_track_stream_stats()) + setTrackStreamStats(port.track_stream_stats()); + if (port.has_user_name()) { data_.set_user_name(port.user_name()); } @@ -181,6 +190,11 @@ void AbstractPort::addNote(QString note) data_.set_notes(notes.toStdString()); } +bool AbstractPort::setTrackStreamStats(bool enable) +{ + data_.set_track_stream_stats(enable); +} + AbstractPort::Accuracy AbstractPort::rateAccuracy() { return rateAccuracy_; diff --git a/server/abstractport.h b/server/abstractport.h index 0324948..da346de 100644 --- a/server/abstractport.h +++ b/server/abstractport.h @@ -90,6 +90,8 @@ public: bool isDirty() { return isSendQueueDirty_; } void setDirty() { isSendQueueDirty_ = true; } + virtual bool setTrackStreamStats(bool enable); + Accuracy rateAccuracy(); virtual bool setRateAccuracy(Accuracy accuracy);