Newer
Older
Bryant Mairs
committed
#include <QStandardPaths>
#include "QGCMAVLinkLogPlayer.h"
#include "ui_QGCMAVLinkLogPlayer.h"
#include "QGCQFileDialog.h"
QGCMAVLinkLogPlayer::QGCMAVLinkLogPlayer(QWidget *parent) :
_replayLink(NULL),
_ui(new Ui::QGCMAVLinkLogPlayer)
_ui->setupUi(this);
_ui->horizontalLayout->setAlignment(Qt::AlignTop);
// Setup buttons
connect(_ui->selectFileButton, &QPushButton::clicked, this, &QGCMAVLinkLogPlayer::_selectLogFileForPlayback);
connect(_ui->playButton, &QPushButton::clicked, this, &QGCMAVLinkLogPlayer::_playPauseToggle);
connect(_ui->positionSlider, &QSlider::valueChanged, this, &QGCMAVLinkLogPlayer::_setPlayheadFromSlider);
connect(_ui->positionSlider, &QSlider::sliderPressed, this, &QGCMAVLinkLogPlayer::_pause);
#if 0
// Speed slider is removed from 3.0 release. Too broken to fix.
connect(_ui->speedSlider, &QSlider::valueChanged, this, &QGCMAVLinkLogPlayer::_setAccelerationFromSlider);
_ui->speedSlider->setMinimum(-100);
_ui->speedSlider->setMaximum(100);
_ui->speedSlider->setValue(0);
#endif
_ui->positionSlider->setMinimum(0);
_ui->positionSlider->setMaximum(100);
if (_replayLink->isPlaying()) {
_pause();
} else {
_replayLink->play();
}
void QGCMAVLinkLogPlayer::_selectLogFileForPlayback(void)
if (qgcApp()->toolbox()->multiVehicleManager()->activeVehicle()) {
QGCMessageBox::information(tr("Log Replay"), tr("You must close all connections prior to replaying a log."));
QString logFilename = QGCQFileDialog::getOpenFileName(
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),
tr("MAVLink Log Files (*.tlog);;All Files (*)"));
LinkInterface* createConnectedLink(LinkConfiguration* config);
LogReplayLinkConfiguration* linkConfig = new LogReplayLinkConfiguration(QString("Log Replay"));
linkConfig->setLogFilename(logFilename);
linkConfig->setName(linkConfig->logFilenameShort());
_ui->logFileNameLabel->setText(linkConfig->logFilenameShort());
LinkManager* linkMgr = qgcApp()->toolbox()->linkManager();
SharedLinkConfigurationPointer sharedConfig = linkMgr->addConfiguration(linkConfig);
_replayLink = (LogReplayLink*)qgcApp()->toolbox()->linkManager()->createConnectedLink(sharedConfig);
connect(_replayLink, &LogReplayLink::logFileStats, this, &QGCMAVLinkLogPlayer::_logFileStats);
connect(_replayLink, &LogReplayLink::playbackStarted, this, &QGCMAVLinkLogPlayer::_playbackStarted);
connect(_replayLink, &LogReplayLink::playbackPaused, this, &QGCMAVLinkLogPlayer::_playbackPaused);
connect(_replayLink, &LogReplayLink::playbackPercentCompleteChanged, this, &QGCMAVLinkLogPlayer::_playbackPercentCompleteChanged);
connect(_replayLink, &LogReplayLink::disconnected, this, &QGCMAVLinkLogPlayer::_replayLinkDisconnected);
}
_ui->logFileNameLabel->setText("Error");
_enablePlaybackControls(false);
QString QGCMAVLinkLogPlayer::_secondsToHMS(int seconds)
{
int secondsPart = seconds;
int minutesPart = secondsPart / 60;
int hoursPart = minutesPart / 60;
secondsPart -= 60 * minutesPart;
minutesPart -= 60 * hoursPart;
return QString("%1h:%2m:%3s").arg(hoursPart, 2).arg(minutesPart, 2).arg(secondsPart, 2);
}
/// Signalled from LogReplayLink once log file information is known
void QGCMAVLinkLogPlayer::_logFileStats(bool logTimestamped, ///< true: timestamped log
int logDurationSeconds, ///< Log duration
int binaryBaudRate) ///< Baud rate for non-timestamped log
Q_UNUSED(logTimestamped);
Q_UNUSED(binaryBaudRate);
_ui->logStatsLabel->setText(_secondsToHMS(logDurationSeconds));
/// Signalled from LogReplayLink when replay starts
void QGCMAVLinkLogPlayer::_playbackStarted(void)
_enablePlaybackControls(true);
_ui->playButton->setChecked(true);
_ui->playButton->setIcon(QIcon(":/res/Pause"));
/// Signalled from LogReplayLink when replay is paused
void QGCMAVLinkLogPlayer::_playbackPaused(void)
{
_ui->playButton->setIcon(QIcon(":/res/Play"));
_ui->playButton->setChecked(false);
void QGCMAVLinkLogPlayer::_playbackPercentCompleteChanged(int percentComplete)
_ui->positionSlider->blockSignals(true);
_ui->positionSlider->setValue(percentComplete);
_ui->positionSlider->blockSignals(false);
void QGCMAVLinkLogPlayer::_setPlayheadFromSlider(int value)
{
if (_replayLink) {
_replayLink->movePlayhead(value);
}
}
Bryant
committed
void QGCMAVLinkLogPlayer::_enablePlaybackControls(bool enabled)
Bryant
committed
{
void QGCMAVLinkLogPlayer::_setAccelerationFromSlider(int value)
if (_replayLink) {
_replayLink->setAccelerationFactor(value);
}
float accelerationFactor;
if (value < 0) {
accelerationFactor = 0.01f;
value -= -100;
if (value > 0) {
accelerationFactor *= (float)value;
}
} else if (value > 0) {
accelerationFactor = 1.0f * (float)value;
} else {
accelerationFactor = 1.0f;
}
_ui->speedLabel->setText(QString("Speed: %1X").arg(accelerationFactor, 5, 'f', 2, '0'));
void QGCMAVLinkLogPlayer::_replayLinkDisconnected(void)
_enablePlaybackControls(false);
_replayLink = NULL;