mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
LP-597 Progress bar for GCS log replay - first batch of fixes from review and some others
- remove extraneous parentheses - use Qt naming convention for playbackPosition -> setPlaybackPosition - consistently use playback instead of playBack - most places: use of "state" instead of "status" - removed empty line - updated file headers - removed QThread include (leftover from debugging) - renamed pauseAndResetPosition to pauseReplayAndResetPosition for consistency with the related functions
This commit is contained in:
parent
fa70cb751c
commit
ecd6d20b13
@ -2,7 +2,7 @@
|
||||
******************************************************************************
|
||||
*
|
||||
* @file logfile.cpp
|
||||
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2017.
|
||||
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2017-2018.
|
||||
* The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @see The GNU Public License (GPL) Version 3
|
||||
*
|
||||
@ -27,7 +27,6 @@
|
||||
#include <QDebug>
|
||||
#include <QtGlobal>
|
||||
#include <QDataStream>
|
||||
#include <QThread> // DEBUG: to display the thread ID
|
||||
|
||||
#define TIMESTAMP_SIZE_BYTES 4
|
||||
|
||||
@ -38,7 +37,7 @@ LogFile::LogFile(QObject *parent) : QIODevice(parent),
|
||||
m_lastPlayed(0),
|
||||
m_timeOffset(0),
|
||||
m_playbackSpeed(1.0),
|
||||
m_replayStatus(STOPPED),
|
||||
m_replayState(STOPPED),
|
||||
m_useProvidedTimeStamp(false),
|
||||
m_providedTimeStamp(0),
|
||||
m_beginTimeStamp(0),
|
||||
@ -150,10 +149,9 @@ qint64 LogFile::bytesAvailable() const
|
||||
This function is called at a 10 ms interval to fill the replay buffers.
|
||||
|
||||
*/
|
||||
|
||||
void LogFile::timerFired()
|
||||
{
|
||||
if (m_replayStatus != PLAYING) {
|
||||
if (m_replayState != PLAYING) {
|
||||
return;
|
||||
}
|
||||
m_timer_tick++;
|
||||
@ -213,7 +211,7 @@ void LogFile::timerFired()
|
||||
|
||||
// rate-limit slider bar position updates to 10 updates per second
|
||||
if (m_timer_tick % 10 == 0) {
|
||||
emit playbackPosition(m_nextTimeStamp);
|
||||
emit setPlaybackPosition(m_nextTimeStamp);
|
||||
}
|
||||
// read next timestamp
|
||||
if (m_file.bytesAvailable() < (qint64)sizeof(m_nextTimeStamp)) {
|
||||
@ -289,7 +287,7 @@ bool LogFile::startReplay()
|
||||
|
||||
m_timer.setInterval(10);
|
||||
m_timer.start();
|
||||
m_replayStatus = PLAYING;
|
||||
m_replayState = PLAYING;
|
||||
|
||||
emit replayStarted();
|
||||
return true;
|
||||
@ -312,7 +310,7 @@ bool LogFile::stopReplay()
|
||||
}
|
||||
qDebug() << "LogFile - stopReplay";
|
||||
m_timer.stop();
|
||||
m_replayStatus = STOPPED;
|
||||
m_replayState = STOPPED;
|
||||
|
||||
emit replayFinished();
|
||||
return true;
|
||||
@ -363,9 +361,9 @@ bool LogFile::resumeReplay(quint32 desiredPosition)
|
||||
|
||||
// Set the real-time interval to 0 to start with:
|
||||
m_myTime.restart();
|
||||
m_timeOffset = 0;
|
||||
m_timeOffset = 0;
|
||||
|
||||
m_replayStatus = PLAYING;
|
||||
m_replayState = PLAYING;
|
||||
|
||||
m_timer.start();
|
||||
|
||||
@ -387,7 +385,7 @@ bool LogFile::pauseReplay()
|
||||
}
|
||||
qDebug() << "LogFile - pauseReplay";
|
||||
m_timer.stop();
|
||||
m_replayStatus = PAUSED;
|
||||
m_replayState = PAUSED;
|
||||
|
||||
// hack to notify UI that replay paused
|
||||
emit replayStarted();
|
||||
@ -395,19 +393,19 @@ bool LogFile::pauseReplay()
|
||||
}
|
||||
|
||||
/**
|
||||
* SLOT: pauseAndResetPosition()
|
||||
* SLOT: pauseReplayAndResetPosition()
|
||||
*
|
||||
* Pauses replay and resets the playback position to the start of the logfile
|
||||
*
|
||||
*/
|
||||
bool LogFile::pauseAndResetPosition()
|
||||
bool LogFile::pauseReplayAndResetPosition()
|
||||
{
|
||||
if (!m_file.isOpen() || !m_timer.isActive()) {
|
||||
return false;
|
||||
}
|
||||
qDebug() << "LogFile - pauseAndResetPosition";
|
||||
qDebug() << "LogFile - pauseReplayAndResetPosition";
|
||||
m_timer.stop();
|
||||
m_replayStatus = STOPPED;
|
||||
m_replayState = STOPPED;
|
||||
|
||||
m_timeOffset = 0;
|
||||
m_lastPlayed = m_timeStamps.at(0);
|
||||
@ -418,14 +416,14 @@ bool LogFile::pauseAndResetPosition()
|
||||
}
|
||||
|
||||
/**
|
||||
* FUNCTION: getReplayStatus()
|
||||
* FUNCTION: getReplayState()
|
||||
*
|
||||
* Returns the current replay status.
|
||||
*
|
||||
*/
|
||||
ReplayState LogFile::getReplayStatus()
|
||||
ReplayState LogFile::getReplayState()
|
||||
{
|
||||
return m_replayStatus;
|
||||
return m_replayState;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2,7 +2,7 @@
|
||||
******************************************************************************
|
||||
*
|
||||
* @file logfile.h
|
||||
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2017.
|
||||
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2017-2018.
|
||||
* The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @see The GNU Public License (GPL) Version 3
|
||||
*
|
||||
@ -32,7 +32,6 @@
|
||||
#include <QTimer>
|
||||
#include <QMutexLocker>
|
||||
#include <QDebug>
|
||||
#include <QBuffer>
|
||||
#include <QFile>
|
||||
#include <QVector>
|
||||
|
||||
@ -78,7 +77,7 @@ public:
|
||||
m_providedTimeStamp = providedTimestamp;
|
||||
}
|
||||
|
||||
ReplayState getReplayStatus();
|
||||
ReplayState getReplayState();
|
||||
|
||||
public slots:
|
||||
void setReplaySpeed(double val)
|
||||
@ -91,7 +90,7 @@ public slots:
|
||||
|
||||
bool resumeReplay(quint32);
|
||||
bool pauseReplay();
|
||||
bool pauseAndResetPosition();
|
||||
bool pauseReplayAndResetPosition();
|
||||
|
||||
protected slots:
|
||||
void timerFired();
|
||||
@ -99,7 +98,7 @@ protected slots:
|
||||
signals:
|
||||
void replayStarted();
|
||||
void replayFinished();
|
||||
void playbackPosition(quint32);
|
||||
void setPlaybackPosition(quint32);
|
||||
void updateBeginAndEndTimes(quint32, quint32);
|
||||
|
||||
protected:
|
||||
@ -116,7 +115,7 @@ protected:
|
||||
|
||||
int m_timeOffset;
|
||||
double m_playbackSpeed;
|
||||
ReplayState m_replayStatus;
|
||||
ReplayState m_replayState;
|
||||
|
||||
private:
|
||||
bool m_useProvidedTimeStamp;
|
||||
|
@ -1,13 +1,14 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file GCSControlgadgetwidget.cpp
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @file logginggadgetwidget.cpp
|
||||
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2018.
|
||||
* The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup GCSControlGadgetPlugin GCSControl Gadget Plugin
|
||||
* @addtogroup LoggingGadgetPlugin Logging Gadget Plugin
|
||||
* @{
|
||||
* @brief A gadget to control the UAV, either from the keyboard or a joystick
|
||||
* @brief A gadget to control playback of a GCS log.
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -66,24 +67,24 @@ void LoggingGadgetWidget::setPlugin(LoggingPlugin *p)
|
||||
// GUI elements to gadgetwidget functions
|
||||
connect(m_logging->playPauseButton, &QPushButton::clicked, this, &LoggingGadgetWidget::playPauseButtonAction);
|
||||
connect(m_logging->stopButton, &QPushButton::clicked, this, &LoggingGadgetWidget::stopButtonAction);
|
||||
connect(m_logging->playBackPosition, &QSlider::valueChanged, this, &LoggingGadgetWidget::sliderMoved);
|
||||
connect(m_logging->playbackPosition, &QSlider::valueChanged, this, &LoggingGadgetWidget::sliderMoved);
|
||||
|
||||
connect(m_logging->playbackSpeed, static_cast<void(QDoubleSpinBox::*) (double)>(&QDoubleSpinBox::valueChanged), logFile, &LogFile::setReplaySpeed);
|
||||
|
||||
// gadgetwidget functions to logfile actions
|
||||
connect(this, &LoggingGadgetWidget::resumeReplay, logFile, &LogFile::resumeReplay);
|
||||
connect(this, &LoggingGadgetWidget::pauseReplay, logFile, &LogFile::pauseReplay);
|
||||
connect(this, &LoggingGadgetWidget::pauseAndResetPosition, logFile, &LogFile::pauseAndResetPosition);
|
||||
connect(this, &LoggingGadgetWidget::pauseReplayAndResetPosition, logFile, &LogFile::pauseReplayAndResetPosition);
|
||||
|
||||
// gadgetwidget functions to scope actions
|
||||
connect(this, &LoggingGadgetWidget::resumeReplay, scpPlugin, &ScopeGadgetFactory::startPlotting);
|
||||
connect(this, &LoggingGadgetWidget::pauseReplay, scpPlugin, &ScopeGadgetFactory::stopPlotting);
|
||||
connect(this, &LoggingGadgetWidget::pauseAndResetPosition, scpPlugin, &ScopeGadgetFactory::stopPlotting);
|
||||
connect(this, &LoggingGadgetWidget::pauseReplayAndResetPosition, scpPlugin, &ScopeGadgetFactory::stopPlotting);
|
||||
|
||||
// Feedback from logfile to GUI
|
||||
connect(loggingPlugin, &LoggingPlugin::stateChanged, this, &LoggingGadgetWidget::stateChanged);
|
||||
connect(logFile, &LogFile::updateBeginAndEndTimes, this, &LoggingGadgetWidget::updateBeginAndEndTimes);
|
||||
connect(logFile, &LogFile::playbackPosition, this, &LoggingGadgetWidget::playbackPosition);
|
||||
connect(logFile, &LogFile::setPlaybackPosition, this, &LoggingGadgetWidget::setPlaybackPosition);
|
||||
connect(logFile, &LogFile::replayStarted, this, &LoggingGadgetWidget::enableButtons);
|
||||
connect(logFile, &LogFile::replayFinished, this, &LoggingGadgetWidget::disableButtons);
|
||||
|
||||
@ -146,13 +147,13 @@ void LoggingGadgetWidget::setPlayPauseButtonToPause()
|
||||
|
||||
void LoggingGadgetWidget::playPauseButtonAction()
|
||||
{
|
||||
ReplayState replayState = (loggingPlugin->getLogfile())->getReplayStatus();
|
||||
ReplayState replayState = loggingPlugin->getLogfile()->getReplayState();
|
||||
|
||||
if (replayState == PLAYING) {
|
||||
emit pauseReplay();
|
||||
setPlayPauseButtonToPlay();
|
||||
} else {
|
||||
emit resumeReplay(m_logging->playBackPosition->value());
|
||||
emit resumeReplay(m_logging->playbackPosition->value());
|
||||
setPlayPauseButtonToPause();
|
||||
}
|
||||
m_logging->stopButton->setEnabled(true);
|
||||
@ -160,18 +161,18 @@ void LoggingGadgetWidget::playPauseButtonAction()
|
||||
|
||||
void LoggingGadgetWidget::stopButtonAction()
|
||||
{
|
||||
ReplayState replayState = (loggingPlugin->getLogfile())->getReplayStatus();
|
||||
ReplayState replayState = loggingPlugin->getLogfile()->getReplayState();
|
||||
|
||||
if (replayState != STOPPED) {
|
||||
emit pauseAndResetPosition();
|
||||
emit pauseReplayAndResetPosition();
|
||||
}
|
||||
m_logging->stopButton->setEnabled(false);
|
||||
setPlayPauseButtonToPlay();
|
||||
|
||||
// Block signals while setting the slider to the start position
|
||||
m_logging->playBackPosition->blockSignals(true);
|
||||
m_logging->playBackPosition->setValue(m_logging->playBackPosition->minimum());
|
||||
m_logging->playBackPosition->blockSignals(false);
|
||||
m_logging->playbackPosition->blockSignals(true);
|
||||
m_logging->playbackPosition->setValue(m_logging->playbackPosition->minimum());
|
||||
m_logging->playbackPosition->blockSignals(false);
|
||||
}
|
||||
|
||||
void LoggingGadgetWidget::stateChanged(LoggingPlugin::State state)
|
||||
@ -182,7 +183,7 @@ void LoggingGadgetWidget::stateChanged(LoggingPlugin::State state)
|
||||
switch (state) {
|
||||
case LoggingPlugin::IDLE:
|
||||
status = tr("Idle");
|
||||
playbackPosition(0);
|
||||
setPlaybackPosition(0);
|
||||
break;
|
||||
case LoggingPlugin::LOGGING:
|
||||
status = tr("Logging");
|
||||
@ -219,23 +220,23 @@ void LoggingGadgetWidget::updateBeginAndEndTimes(quint32 startTimeStamp, quint32
|
||||
m_logging->endTimeLabel->setText(QString("%1:%2").arg(endMin, 2, 10, QChar('0')).arg(endSec, 2, 10, QChar('0')));
|
||||
|
||||
// Update position bar
|
||||
m_logging->playBackPosition->setMinimum(startTimeStamp);
|
||||
m_logging->playBackPosition->setMaximum(endTimeStamp);
|
||||
m_logging->playbackPosition->setMinimum(startTimeStamp);
|
||||
m_logging->playbackPosition->setMaximum(endTimeStamp);
|
||||
|
||||
m_logging->playBackPosition->setSingleStep((endTimeStamp - startTimeStamp) / 100);
|
||||
m_logging->playBackPosition->setPageStep((endTimeStamp - startTimeStamp) / 10);
|
||||
m_logging->playBackPosition->setTickInterval((endTimeStamp - startTimeStamp) / 10);
|
||||
m_logging->playBackPosition->setTickPosition(QSlider::TicksBothSides);
|
||||
m_logging->playbackPosition->setSingleStep((endTimeStamp - startTimeStamp) / 100);
|
||||
m_logging->playbackPosition->setPageStep((endTimeStamp - startTimeStamp) / 10);
|
||||
m_logging->playbackPosition->setTickInterval((endTimeStamp - startTimeStamp) / 10);
|
||||
m_logging->playbackPosition->setTickPosition(QSlider::TicksBothSides);
|
||||
}
|
||||
|
||||
void LoggingGadgetWidget::playbackPosition(quint32 positionTimeStamp)
|
||||
void LoggingGadgetWidget::setPlaybackPosition(quint32 positionTimeStamp)
|
||||
{
|
||||
// Update position bar, but only if the user is not updating the slider position
|
||||
if (!m_logging->playBackPosition->isSliderDown() && !sliderActionDelay.isActive()) {
|
||||
if (!m_logging->playbackPosition->isSliderDown() && !sliderActionDelay.isActive()) {
|
||||
// Block signals during slider position update:
|
||||
m_logging->playBackPosition->blockSignals(true);
|
||||
m_logging->playBackPosition->setValue(positionTimeStamp);
|
||||
m_logging->playBackPosition->blockSignals(false);
|
||||
m_logging->playbackPosition->blockSignals(true);
|
||||
m_logging->playbackPosition->setValue(positionTimeStamp);
|
||||
m_logging->playbackPosition->blockSignals(false);
|
||||
|
||||
// update position label
|
||||
updatePositionLabel(positionTimeStamp);
|
||||
@ -244,7 +245,7 @@ void LoggingGadgetWidget::playbackPosition(quint32 positionTimeStamp)
|
||||
|
||||
void LoggingGadgetWidget::enableButtons()
|
||||
{
|
||||
ReplayState replayState = (loggingPlugin->getLogfile())->getReplayStatus();
|
||||
ReplayState replayState = loggingPlugin->getLogfile()->getReplayState();
|
||||
|
||||
switch (replayState) {
|
||||
case STOPPED:
|
||||
@ -263,7 +264,7 @@ void LoggingGadgetWidget::enableButtons()
|
||||
break;
|
||||
}
|
||||
m_logging->playPauseButton->setEnabled(true);
|
||||
m_logging->playBackPosition->setEnabled(true);
|
||||
m_logging->playbackPosition->setEnabled(true);
|
||||
}
|
||||
|
||||
void LoggingGadgetWidget::disableButtons()
|
||||
@ -272,7 +273,7 @@ void LoggingGadgetWidget::disableButtons()
|
||||
setPlayPauseButtonToPlay();
|
||||
m_logging->stopButton->setEnabled(false);
|
||||
|
||||
m_logging->playBackPosition->setEnabled(false);
|
||||
m_logging->playbackPosition->setEnabled(false);
|
||||
}
|
||||
|
||||
void LoggingGadgetWidget::updateButtonAppearance()
|
||||
@ -283,7 +284,7 @@ void LoggingGadgetWidget::updateButtonAppearance()
|
||||
// loggingPlugin has not been completely initialized: set to STOPPED state
|
||||
replayState = STOPPED;
|
||||
} else {
|
||||
replayState = (loggingPlugin->getLogfile())->getReplayStatus();
|
||||
replayState = loggingPlugin->getLogfile()->getReplayState();
|
||||
}
|
||||
|
||||
// Update playPause button appearance
|
||||
@ -325,7 +326,7 @@ void LoggingGadgetWidget::sliderMoved(int position)
|
||||
|
||||
void LoggingGadgetWidget::sliderAction()
|
||||
{
|
||||
emit resumeReplay(m_logging->playBackPosition->value());
|
||||
emit resumeReplay(m_logging->playbackPosition->value());
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,13 +1,14 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file GCSControlgadgetwidget.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @file logginggadgetwidget.h
|
||||
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2018.
|
||||
* The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup GCSControlGadgetPlugin GCSControl Gadget Plugin
|
||||
* @addtogroup LoggingGadgetPlugin Logging Gadget Plugin
|
||||
* @{
|
||||
* @brief A place holder gadget plugin
|
||||
* @brief A gadget to control playback of a GCS log.
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -50,7 +51,7 @@ public:
|
||||
protected slots:
|
||||
void stateChanged(LoggingPlugin::State state);
|
||||
void updateBeginAndEndTimes(quint32 startTimeStamp, quint32 endTimeStamp);
|
||||
void playbackPosition(quint32 positionTimeStamp);
|
||||
void setPlaybackPosition(quint32 positionTimeStamp);
|
||||
void playPauseButtonAction();
|
||||
void stopButtonAction();
|
||||
void enableButtons();
|
||||
@ -61,7 +62,7 @@ protected slots:
|
||||
signals:
|
||||
void resumeReplay(quint32 positionTimeStamp);
|
||||
void pauseReplay();
|
||||
void pauseAndResetPosition();
|
||||
void pauseReplayAndResetPosition();
|
||||
|
||||
private:
|
||||
Ui_Logging *m_logging;
|
||||
|
Loading…
x
Reference in New Issue
Block a user