2525#include < sstream>
2626#include < iomanip>
2727
28+ #define CONNECT_OSIREADER (number ) \
29+ connect (this , &MainWindow::StartPlaybackRequested##number, reader##number##_, &OsiReader::StartReadFile, Qt::QueuedConnection); \
30+ connect (reader##number##_, &OsiReader::Connected, this , &MainWindow::Connected##number); \
31+ connect (reader##number##_, &OsiReader::Disconnected, this , &MainWindow::Disconnected##number); \
32+ connect (reader##number##_, &OsiReader::Connected, glWidget##number##_, &GLWidget::Connected, Qt::DirectConnection); \
33+ connect (reader##number##_, &OsiReader::Disconnected, glWidget##number##_, &GLWidget::Disconnected, Qt::DirectConnection); \
34+ connect (reader##number##_, &OsiReader::UpdateSliderRange, this , &MainWindow::UpdateSliderRange##number); \
35+ connect (reader##number##_, &OsiReader::UpdateSliderValue, this , &MainWindow::UpdateSliderValue##number); \
36+ connect (reader##number##_, &OsiReader::MessageSDSendout, osiparser##number##_, &OsiParser::ParseReceivedSDMessage, Qt::QueuedConnection); \
37+ connect (reader##number##_, &OsiReader::MessageSVSendout, osiparser##number##_, &OsiParser::ParseReceivedSVMessage, Qt::QueuedConnection);\
38+ connect (ui_->hSlider_##number, &QSlider::valueChanged, reader##number##_, &OsiReader::SliderValueChanged);
39+
40+ #define CONNECT_TCP_RECEIVER (number ) \
41+ connect (this , &MainWindow::ConnectRequested##number, tcpReceiver##number##_, &TCPReceiver::ConnectRequested, Qt::QueuedConnection); \
42+ connect (tcpReceiver##number##_, &TCPReceiver::Connected, this , &MainWindow::Connected##number); \
43+ connect (tcpReceiver##number##_, &TCPReceiver::Disconnected, this , &MainWindow::Disconnected##number); \
44+ connect (tcpReceiver##number##_, &TCPReceiver::Connected, glWidget##number##_, &GLWidget::Connected, Qt::DirectConnection); \
45+ connect (tcpReceiver##number##_, &TCPReceiver::Disconnected, glWidget##number##_, &GLWidget::Disconnected, Qt::DirectConnection); \
46+ connect (tcpReceiver##number##_, &TCPReceiver::UpdateSliderTime, this , &MainWindow::UpdateSliderTime##number); \
47+ connect (tcpReceiver##number##_, &TCPReceiver::MessageSDReceived, osiparser##number##_, &OsiParser::ParseReceivedSDMessage, Qt::QueuedConnection); \
48+ connect (tcpReceiver##number##_, &TCPReceiver::MessageSVReceived, osiparser##number##_, &OsiParser::ParseReceivedSVMessage, Qt::QueuedConnection);
2849
2950
3051MainWindow::MainWindow (QWidget *parent)
@@ -47,15 +68,15 @@ MainWindow::MainWindow(QWidget *parent)
4768 , ui_(new Ui::MainWindow)
4869
4970 , glWidget_(nullptr )
50- , tcpReceiver_(new TCPReceiver() )
71+ , tcpReceiver_(nullptr )
5172 , fmuReceiver_(new FMUReceiver())
52- , reader_(new OsiReader(&config_.ch1DeltaDelay_, config_.ch1EnableSendOut_, config_.ch1SendOutPortNum_.toStdString(), config_.ch1FMUTxCheck_, config_.ch1LoadFMUTx_.toStdString()) )
73+ , reader_(nullptr )
5374 , osiparser_(new OsiParser(config_))
5475
5576 , glWidget2_(nullptr )
56- , tcpReceiver2_(new TCPReceiver() )
77+ , tcpReceiver2_(nullptr )
5778 , fmuReceiver2_(new FMUReceiver())
58- , reader2_(new OsiReader(&config_.ch2DeltaDelay_, config_.ch2EnableSendOut_, config_.ch2SendOutPortNum_.toStdString(), config_.ch2FMUTxCheck_, config_.ch2LoadFMUTx_.toStdString()) )
79+ , reader2_(nullptr )
5980 , osiparser2_(new OsiParser(config_))
6081
6182 , colorWidgets_()
@@ -126,6 +147,22 @@ MainWindow::LocalUpdate()
126147
127148MainWindow::~MainWindow ()
128149{
150+ if (isConnected2_)
151+ {
152+ tcpReceiver2_->DisconnectRequested ();
153+ }
154+ if (isConnected_)
155+ {
156+ tcpReceiver_->DisconnectRequested ();
157+ }
158+ if (isPlayed_)
159+ {
160+ reader_->StopReadFile ();
161+ }
162+ if (isPlayed2_)
163+ {
164+ reader2_->StopReadFile ();
165+ }
129166 // Call all deletes in reversed order!
130167 delete glWidget_;
131168 delete glWidget2_;
@@ -464,6 +501,8 @@ MainWindow::PlayPauseButtonClicked()
464501 LocalPlayPause2 ();
465502
466503 UpdateCombineChannelMenu ();
504+ ui_->zmq_type_connect_1 ->setEnabled (false );
505+ ui_->zmq_type_playback_1 ->setEnabled (false );
467506}
468507
469508void
@@ -499,9 +538,9 @@ MainWindow::LocalPlayPause()
499538 Stop ();
500539 Play ();
501540
502- ui_->hSlider ->blockSignals (true );
503- ui_->hSlider ->setValue (0 );
504- ui_->hSlider ->blockSignals (false );
541+ ui_->hSlider_ ->blockSignals (true );
542+ ui_->hSlider_ ->setValue (0 );
543+ ui_->hSlider_ ->blockSignals (false );
505544 }
506545 else
507546 {
@@ -521,6 +560,8 @@ MainWindow::PlayPauseButtonClicked2()
521560 LocalPlayPause ();
522561
523562 UpdateCombineChannelMenu ();
563+ ui_->zmq_type_connect_2 ->setEnabled (false );
564+ ui_->zmq_type_playback_2 ->setEnabled (false );
524565}
525566
526567void
@@ -745,24 +786,7 @@ MainWindow::ConnectSignalsToSlots()
745786 connect (ui_->playPauseButton , &QToolButton::clicked, this , &MainWindow::PlayPauseButtonClicked);
746787 connect (ui_->playPauseButton_2 , &QToolButton::clicked, this , &MainWindow::PlayPauseButtonClicked2);
747788
748- // signals and slots related to connection status
749- // If not queued, this signal will block the GUI. Same applies for Connect/Disconnect in TCPReceiver.
750- connect (this , &MainWindow::ConnectRequested, tcpReceiver_, &TCPReceiver::ConnectRequested, Qt::QueuedConnection);
751- connect (tcpReceiver_, &TCPReceiver::Connected, this , &MainWindow::Connected);
752- connect (tcpReceiver_, &TCPReceiver::Disconnected, this , &MainWindow::Disconnected);
753- connect (tcpReceiver_, &TCPReceiver::Connected, glWidget_, &GLWidget::Connected, Qt::DirectConnection);
754- connect (tcpReceiver_, &TCPReceiver::Disconnected, glWidget_, &GLWidget::Disconnected, Qt::DirectConnection);
755-
756- connect (tcpReceiver_, &TCPReceiver::UpdateSliderTime, this , &MainWindow::UpdateSliderTime);
757-
758- connect (this , &MainWindow::ConnectRequested2, tcpReceiver2_, &TCPReceiver::ConnectRequested, Qt::QueuedConnection);
759- connect (tcpReceiver2_, &TCPReceiver::Connected, this , &MainWindow::Connected2);
760- connect (tcpReceiver2_, &TCPReceiver::Disconnected, this , &MainWindow::Disconnected2);
761- connect (tcpReceiver2_, &TCPReceiver::Connected, glWidget2_, &GLWidget::Connected, Qt::DirectConnection);
762- connect (tcpReceiver2_, &TCPReceiver::Disconnected, glWidget2_, &GLWidget::Disconnected, Qt::DirectConnection);
763-
764- connect (tcpReceiver2_, &TCPReceiver::UpdateSliderTime, this , &MainWindow::UpdateSliderTime2);
765-
789+ // Signals and slots related to connection status of FMU
766790 connect (this , &MainWindow::FMUConnectRequested, fmuReceiver_, &FMUReceiver::ConnectRequested, Qt::QueuedConnection);
767791 connect (fmuReceiver_, &FMUReceiver::Connected, this , &MainWindow::Connected);
768792 connect (fmuReceiver_, &FMUReceiver::Disconnected, this , &MainWindow::Disconnected);
@@ -776,43 +800,13 @@ MainWindow::ConnectSignalsToSlots()
776800 connect (fmuReceiver2_, &FMUReceiver::Disconnected, this , &MainWindow::Disconnected2);
777801 connect (fmuReceiver2_, &FMUReceiver::Connected, glWidget2_, &GLWidget::Connected, Qt::DirectConnection);
778802 connect (fmuReceiver2_, &FMUReceiver::Disconnected, glWidget2_, &GLWidget::Disconnected, Qt::DirectConnection);
779-
780803 connect (fmuReceiver2_, &FMUReceiver::UpdateSliderTime, this , &MainWindow::UpdateSliderTime2);
781804
782- connect (this , &MainWindow::StartPlaybackRequested, reader_, &OsiReader::StartReadFile, Qt::QueuedConnection);
783- connect (reader_, &OsiReader::Connected, this , &MainWindow::Connected);
784- connect (reader_, &OsiReader::Disconnected, this , &MainWindow::Disconnected);
785- connect (reader_, &OsiReader::Connected, glWidget_, &GLWidget::Connected, Qt::DirectConnection);
786- connect (reader_, &OsiReader::Disconnected, glWidget_, &GLWidget::Disconnected, Qt::DirectConnection);
787-
788- connect (reader_, &OsiReader::UpdateSliderRange, this , &MainWindow::UpdateSliderRange);
789- connect (reader_, &OsiReader::UpdateSliderValue, this , &MainWindow::UpdateSliderValue);
790-
791- connect (this , &MainWindow::StartPlaybackRequested2, reader2_, &OsiReader::StartReadFile, Qt::QueuedConnection);
792- connect (reader2_, &OsiReader::Connected, this , &MainWindow::Connected2);
793- connect (reader2_, &OsiReader::Disconnected, this , &MainWindow::Disconnected2);
794- connect (reader2_, &OsiReader::Connected, glWidget2_, &GLWidget::Connected, Qt::DirectConnection);
795- connect (reader2_, &OsiReader::Disconnected, glWidget2_, &GLWidget::Disconnected, Qt::DirectConnection);
796-
797- connect (reader2_, &OsiReader::UpdateSliderRange, this , &MainWindow::UpdateSliderRange2);
798- connect (reader2_, &OsiReader::UpdateSliderValue, this , &MainWindow::UpdateSliderValue2);
799-
800- // Main loop: receive(read) -> parse -> update objects
801- connect (tcpReceiver_, &TCPReceiver::MessageSDReceived, osiparser_, &OsiParser::ParseReceivedSDMessage, Qt::QueuedConnection);
802- connect (tcpReceiver_, &TCPReceiver::MessageSVReceived, osiparser_, &OsiParser::ParseReceivedSVMessage, Qt::QueuedConnection);
803- connect (tcpReceiver2_, &TCPReceiver::MessageSDReceived, osiparser2_, &OsiParser::ParseReceivedSDMessage, Qt::QueuedConnection);
804- connect (tcpReceiver2_, &TCPReceiver::MessageSVReceived, osiparser2_, &OsiParser::ParseReceivedSVMessage, Qt::QueuedConnection);
805-
806805 connect (fmuReceiver_, &FMUReceiver::MessageSDReceived, osiparser_, &OsiParser::ParseReceivedSDMessage, Qt::QueuedConnection);
807806 connect (fmuReceiver_, &FMUReceiver::MessageSVReceived, osiparser_, &OsiParser::ParseReceivedSVMessage, Qt::QueuedConnection);
808807 connect (fmuReceiver2_, &FMUReceiver::MessageSDReceived, osiparser2_, &OsiParser::ParseReceivedSDMessage, Qt::QueuedConnection);
809808 connect (fmuReceiver2_, &FMUReceiver::MessageSVReceived, osiparser2_, &OsiParser::ParseReceivedSVMessage, Qt::QueuedConnection);
810809
811- connect (reader_, &OsiReader::MessageSDSendout, osiparser_, &OsiParser::ParseReceivedSDMessage, Qt::QueuedConnection);
812- connect (reader_, &OsiReader::MessageSVSendout, osiparser_, &OsiParser::ParseReceivedSVMessage, Qt::QueuedConnection);
813- connect (reader2_, &OsiReader::MessageSDSendout, osiparser2_, &OsiParser::ParseReceivedSDMessage, Qt::QueuedConnection);
814- connect (reader2_, &OsiReader::MessageSVSendout, osiparser2_, &OsiParser::ParseReceivedSVMessage, Qt::QueuedConnection);
815-
816810 connect (osiparser_, &OsiParser::MessageParsed, glWidget_, &GLWidget::MessageParsed, Qt::QueuedConnection);
817811 connect (osiparser2_, &OsiParser::MessageParsed, glWidget2_, &GLWidget::MessageParsed, Qt::QueuedConnection);
818812
@@ -837,10 +831,6 @@ MainWindow::ConnectSignalsToSlots()
837831 connect (ui_->objectTree_2 , &QTreeWidget::itemChanged, glWidget2_, &GLWidget::TreeItemChanged);
838832 connect (ui_->objectTree_2 , &QTreeWidget::itemClicked, this , &MainWindow::ConnectDisplayObjectInformation2);
839833
840- // slider
841- connect (ui_->hSlider , &QSlider::valueChanged, reader_, &OsiReader::SliderValueChanged);
842- connect (ui_->hSlider_2 , &QSlider::valueChanged, reader2_, &OsiReader::SliderValueChanged);
843-
844834 // Tracking
845835 connect (glWidget_, &GLWidget::SetTrackingEnabled, this , &MainWindow::SetTrackingEnabled);
846836 connect (ui_->startStopTrackingButton , &QPushButton::clicked, glWidget_, &GLWidget::StartTracking);
@@ -882,6 +872,97 @@ MainWindow::ConnectSignalsToSlots()
882872 connect (ui_->dataType_2 , static_cast <void (QComboBox::*)(int )>(&QComboBox::currentIndexChanged), this , &MainWindow::CBDataTypeCon2);
883873 connect (ui_->playbackDataType_2 , static_cast <void (QComboBox::*)(int )>(&QComboBox::currentIndexChanged), this , &MainWindow::CBDataTypePlay2);
884874
875+ // ZMQ communication type (push/pull or pub/sub) connection
876+ connect (ui_->zmq_type_connect_1 , static_cast <void (QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged), this , &MainWindow::CBZmqTypeChangeConnect1);
877+ connect (ui_->zmq_type_playback_1 , static_cast <void (QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged), this , &MainWindow::CBZmqTypeChangePlayback1);
878+
879+ connect (ui_->zmq_type_connect_2 , static_cast <void (QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged), this , &MainWindow::CBZmqTypeChangeConnect2);
880+ connect (ui_->zmq_type_playback_2 , static_cast <void (QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged), this , &MainWindow::CBZmqTypeChangePlayback2);
881+ }
882+
883+ void
884+ MainWindow::CBZmqTypeChangeConnect1 (const QString& type)
885+ {
886+ if (tcpReceiver_ != nullptr )
887+ {
888+ delete tcpReceiver_;
889+ }
890+
891+ if (type == " Push/Pull" )
892+ {
893+ tcpReceiver_ = new TCPReceiver{ZMQ_PULL};
894+ }
895+ else if (type == " Pub/Sub" )
896+ {
897+ tcpReceiver_ = new TCPReceiver{ZMQ_SUB};
898+ }
899+
900+ CONNECT_TCP_RECEIVER ();
901+ UpdateGLWidgetMessageSource ();
902+ }
903+
904+ void
905+ MainWindow::CBZmqTypeChangePlayback1 (const QString& type)
906+ {
907+ if (reader_ != nullptr )
908+ {
909+ delete reader_;
910+ reader_ = nullptr ;
911+ }
912+
913+ if (type == " Push/Pull" )
914+ {
915+ reader_ = new OsiReader (&config_.ch1DeltaDelay_ , config_.ch1EnableSendOut_ , config_.ch1SendOutPortNum_ .toStdString (), config_.ch1FMUTxCheck_ , ZMQ_PUSH, config_.ch1LoadFMUTx_ .toStdString ());
916+ }
917+ else if (type == " Pub/Sub" )
918+ {
919+ reader_ = new OsiReader (&config_.ch1DeltaDelay_ , config_.ch1EnableSendOut_ , config_.ch1SendOutPortNum_ .toStdString (), config_.ch1FMUTxCheck_ , ZMQ_PUB, config_.ch1LoadFMUTx_ .toStdString ());
920+ }
921+
922+ CONNECT_OSIREADER ();
923+ UpdateGLWidgetMessageSource ();
924+ }
925+
926+ void
927+ MainWindow::CBZmqTypeChangeConnect2 (const QString& type)
928+ {
929+ if (tcpReceiver2_ != nullptr )
930+ {
931+ delete tcpReceiver2_;
932+ }
933+
934+ if (type == " Push/Pull" )
935+ {
936+ tcpReceiver2_ = new TCPReceiver{ZMQ_PULL};
937+ }
938+ else if (type == " Pub/Sub" )
939+ {
940+ tcpReceiver2_ = new TCPReceiver{ZMQ_SUB};
941+ }
942+
943+ CONNECT_TCP_RECEIVER (2 );
944+ UpdateGLWidgetMessageSource2 ();
945+ }
946+
947+ void
948+ MainWindow::CBZmqTypeChangePlayback2 (const QString& type)
949+ {
950+ if (reader2_ != nullptr )
951+ {
952+ delete reader2_;
953+ reader2_ = nullptr ;
954+ }
955+ if (type == " Push/Pull" )
956+ {
957+ reader2_ = new OsiReader (&config_.ch2DeltaDelay_ , config_.ch2EnableSendOut_ , config_.ch2SendOutPortNum_ .toStdString (), config_.ch2FMUTxCheck_ , ZMQ_PUSH, config_.ch2LoadFMUTx_ .toStdString ());
958+ }
959+ else if (type == " Pub/Sub" )
960+ {
961+ reader2_ = new OsiReader (&config_.ch2DeltaDelay_ , config_.ch2EnableSendOut_ , config_.ch2SendOutPortNum_ .toStdString (), config_.ch2FMUTxCheck_ , ZMQ_PUB, config_.ch2LoadFMUTx_ .toStdString ());
962+ }
963+
964+ CONNECT_OSIREADER (2 );
965+ UpdateGLWidgetMessageSource2 ();
885966}
886967
887968void
@@ -1013,7 +1094,7 @@ MainWindow::EnablePlaybackGroup2(bool enable)
10131094void
10141095MainWindow::EnableSlider (bool enable)
10151096{
1016- ui_->hSlider ->setEnabled (enable);
1097+ ui_->hSlider_ ->setEnabled (enable);
10171098}
10181099
10191100void
@@ -1435,6 +1516,18 @@ MainWindow::InitComboBoxes()
14351516 ui_->playbackDataType ->addItem (" SensorData" );
14361517 ui_->playbackDataType_2 ->addItem (" SensorView" );
14371518 ui_->playbackDataType_2 ->addItem (" SensorData" );
1519+
1520+ ui_->zmq_type_connect_1 ->addItem (zmqPushPull_);
1521+ ui_->zmq_type_connect_1 ->addItem (" Pub/Sub" );
1522+
1523+ ui_->zmq_type_playback_1 ->addItem (zmqPushPull_);
1524+ ui_->zmq_type_playback_1 ->addItem (" Pub/Sub" );
1525+
1526+ ui_->zmq_type_connect_2 ->addItem (zmqPushPull_);
1527+ ui_->zmq_type_connect_2 ->addItem (" Pub/Sub" );
1528+
1529+ ui_->zmq_type_playback_2 ->addItem (zmqPushPull_);
1530+ ui_->zmq_type_playback_2 ->addItem (" Pub/Sub" );
14381531}
14391532
14401533void
@@ -2026,7 +2119,7 @@ MainWindow::GetStringFromMilliSecond(int milliSec)
20262119void
20272120MainWindow::UpdateSliderRange (int sliderRange)
20282121{
2029- ui_->hSlider ->setRange (0 , sliderRange);
2122+ ui_->hSlider_ ->setRange (0 , sliderRange);
20302123 ui_->hSliderTimeRange ->setText (GetStringFromMilliSecond (sliderRange));
20312124}
20322125
@@ -2040,9 +2133,9 @@ MainWindow::UpdateSliderRange2(int sliderRange)
20402133void
20412134MainWindow::UpdateSliderValue (int sliderValue)
20422135{
2043- ui_->hSlider ->blockSignals (true );
2044- ui_->hSlider ->setValue (sliderValue);
2045- ui_->hSlider ->blockSignals (false );
2136+ ui_->hSlider_ ->blockSignals (true );
2137+ ui_->hSlider_ ->setValue (sliderValue);
2138+ ui_->hSlider_ ->blockSignals (false );
20462139 UpdateSliderTime (sliderValue);
20472140}
20482141
0 commit comments