File Input: loop handling phase 2

This commit is contained in:
f4exb 2018-10-14 01:52:40 +02:00
parent bb1e3f3933
commit 2c87e67057
3 changed files with 58 additions and 6 deletions

View File

@ -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)

View File

@ -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;
}

View File

@ -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