diff --git a/plugins/samplesource/filesource/filesourcegui.cpp b/plugins/samplesource/filesource/filesourcegui.cpp index e03ad4e20..eb6509f58 100644 --- a/plugins/samplesource/filesource/filesourcegui.cpp +++ b/plugins/samplesource/filesource/filesourcegui.cpp @@ -64,13 +64,11 @@ FileSourceGui::FileSourceGui(DeviceUISet *deviceUISet, QWidget* parent) : connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus())); m_statusTimer.start(500); - displaySettings(); setAccelerationCombo(); + displaySettings(); ui->navTimeSlider->setEnabled(false); ui->acceleration->setEnabled(false); - ui->playLoop->setChecked(true); // FIXME: always play in a loop - ui->playLoop->setEnabled(false); m_sampleSource = m_deviceUISet->m_deviceSourceAPI->getSampleSource(); @@ -202,6 +200,17 @@ bool FileSourceGui::handleMessage(const Message& message) return true; } + else if (FileSourceInput::MsgPlayPause::match(message)) + { + FileSourceInput::MsgPlayPause& notif = (FileSourceInput::MsgPlayPause&) message; + bool checked = notif.getPlayPause(); + ui->play->setChecked(checked); + ui->navTimeSlider->setEnabled(!checked); + ui->acceleration->setEnabled(!checked); + m_enableNavTime = !checked; + + return true; + } else if (FileSourceInput::MsgReportHeaderCRC::match(message)) { FileSourceInput::MsgReportHeaderCRC& notif = (FileSourceInput::MsgReportHeaderCRC&) message; @@ -228,15 +237,23 @@ void FileSourceGui::updateSampleRateAndFrequency() void FileSourceGui::displaySettings() { + ui->playLoop->blockSignals(true); + ui->acceleration->blockSignals(true); + ui->playLoop->setChecked(m_settings.m_loop); + ui->acceleration->setCurrentIndex(FileSourceSettings::getAccelerationIndex(m_settings.m_accelerationFactor)); + ui->acceleration->blockSignals(false); + ui->playLoop->blockSignals(false); } void FileSourceGui::sendSettings() { } -void FileSourceGui::on_playLoop_toggled(bool checked __attribute__((unused))) +void FileSourceGui::on_playLoop_toggled(bool checked) { - // TODO: do something about it! + m_settings.m_loop = checked; + FileSourceInput::MsgConfigureFileSource *message = FileSourceInput::MsgConfigureFileSource::create(m_settings); + m_sampleSource->getInputMessageQueue()->push(message); } void FileSourceGui::on_startStop_toggled(bool checked) diff --git a/plugins/samplesource/filesource/filesourceinput.cpp b/plugins/samplesource/filesource/filesourceinput.cpp index e39023412..c2fd15b29 100644 --- a/plugins/samplesource/filesource/filesourceinput.cpp +++ b/plugins/samplesource/filesource/filesourceinput.cpp @@ -40,6 +40,7 @@ MESSAGE_CLASS_DEFINITION(FileSourceInput::MsgConfigureFileSourceWork, Message) MESSAGE_CLASS_DEFINITION(FileSourceInput::MsgConfigureFileSourceSeek, Message) MESSAGE_CLASS_DEFINITION(FileSourceInput::MsgConfigureFileSourceStreamTiming, Message) MESSAGE_CLASS_DEFINITION(FileSourceInput::MsgStartStop, Message) +MESSAGE_CLASS_DEFINITION(FileSourceInput::MsgPlayPause, Message) MESSAGE_CLASS_DEFINITION(FileSourceInput::MsgReportFileSourceAcquisition, Message) MESSAGE_CLASS_DEFINITION(FileSourceInput::MsgReportFileSourceStreamData, Message) MESSAGE_CLASS_DEFINITION(FileSourceInput::MsgReportFileSourceStreamTiming, Message) @@ -332,7 +333,8 @@ bool FileSourceInput::handleMessage(const Message& message) if (m_fileSourceThread != 0) { - if (getMessageQueueToGUI()) { + if (getMessageQueueToGUI()) + { report = MsgReportFileSourceStreamTiming::create(m_fileSourceThread->getSamplesCount()); getMessageQueueToGUI()->push(report); } @@ -364,11 +366,25 @@ bool FileSourceInput::handleMessage(const Message& message) qDebug() << "FileSourceInput::handleMessage: MsgReportEOF"; m_fileSourceThread->stopWork(); + if (getMessageQueueToGUI()) + { + MsgReportFileSourceStreamTiming *report = MsgReportFileSourceStreamTiming::create(m_fileSourceThread->getSamplesCount()); + getMessageQueueToGUI()->push(report); + } + if (m_settings.m_loop) { seekFileStream(0); m_fileSourceThread->startWork(); } + else + { + if (getMessageQueueToGUI()) + { + MsgPlayPause *report = MsgPlayPause::create(false); + getMessageQueueToGUI()->push(report); + } + } return true; } diff --git a/plugins/samplesource/filesource/filesourceinput.h b/plugins/samplesource/filesource/filesourceinput.h index cc731bf13..66c1c501c 100644 --- a/plugins/samplesource/filesource/filesourceinput.h +++ b/plugins/samplesource/filesource/filesourceinput.h @@ -168,6 +168,25 @@ public: { } }; + class MsgPlayPause : public Message { + MESSAGE_CLASS_DECLARATION + + public: + bool getPlayPause() const { return m_playPause; } + + static MsgPlayPause* create(bool playPause) { + return new MsgPlayPause(playPause); + } + + protected: + bool m_playPause; + + MsgPlayPause(bool playPause) : + Message(), + m_playPause(playPause) + { } + }; + class MsgReportFileSourceStreamData : public Message { MESSAGE_CLASS_DECLARATION