Commit 0209f4ad authored by lm's avatar lm

Fixed Log replay

parent 7f9de5e1
...@@ -127,6 +127,15 @@ MainWindow::MainWindow(QWidget *parent): ...@@ -127,6 +127,15 @@ MainWindow::MainWindow(QWidget *parent):
centerStack = new QStackedWidget(this); centerStack = new QStackedWidget(this);
setCentralWidget(centerStack); setCentralWidget(centerStack);
// Load Toolbar
toolBar = new QGCToolBar(this);
this->addToolBar(toolBar);
// Add actions
toolBar->addPerspectiveChangeAction(ui.actionOperatorsView);
toolBar->addPerspectiveChangeAction(ui.actionEngineersView);
toolBar->addPerspectiveChangeAction(ui.actionPilotsView);
toolBar->addPerspectiveChangeAction(ui.actionUnconnectedView);
buildCommonWidgets(); buildCommonWidgets();
connectCommonWidgets(); connectCommonWidgets();
...@@ -181,14 +190,6 @@ MainWindow::MainWindow(QWidget *parent): ...@@ -181,14 +190,6 @@ MainWindow::MainWindow(QWidget *parent):
fgLink = new QGCFlightGearLink(); fgLink = new QGCFlightGearLink();
fgLink->connectSimulation(); fgLink->connectSimulation();
// Load Toolbar
toolBar = new QGCToolBar(this);
this->addToolBar(toolBar);
// Add actions
toolBar->addPerspectiveChangeAction(ui.actionOperatorsView);
toolBar->addPerspectiveChangeAction(ui.actionEngineersView);
toolBar->addPerspectiveChangeAction(ui.actionPilotsView);
// Connect link // Connect link
if (autoReconnect) if (autoReconnect)
{ {
...@@ -408,7 +409,9 @@ void MainWindow::buildCommonWidgets() ...@@ -408,7 +409,9 @@ void MainWindow::buildCommonWidgets()
if (!logPlayerDockWidget) if (!logPlayerDockWidget)
{ {
logPlayerDockWidget = new QDockWidget(tr("MAVLink Log Player"), this); logPlayerDockWidget = new QDockWidget(tr("MAVLink Log Player"), this);
logPlayerDockWidget->setWidget( new QGCMAVLinkLogPlayer(mavlink, this) ); logPlayer = new QGCMAVLinkLogPlayer(mavlink, this);
toolBar->setLogPlayer(logPlayer);
logPlayerDockWidget->setWidget(logPlayer);
logPlayerDockWidget->setObjectName("MAVLINK_LOG_PLAYER_DOCKWIDGET"); logPlayerDockWidget->setObjectName("MAVLINK_LOG_PLAYER_DOCKWIDGET");
addTool(logPlayerDockWidget, tr("MAVLink Log Replay"), Qt::RightDockWidgetArea); addTool(logPlayerDockWidget, tr("MAVLink Log Replay"), Qt::RightDockWidgetArea);
} }
......
...@@ -75,6 +75,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -75,6 +75,7 @@ This file is part of the QGROUNDCONTROL project
#include "SlugsPadCameraControl.h" #include "SlugsPadCameraControl.h"
#include "UASControlParameters.h" #include "UASControlParameters.h"
#include "QGCFlightGearLink.h" #include "QGCFlightGearLink.h"
#include "QGCMAVLinkLogPlayer.h"
class QGCMapTool; class QGCMapTool;
...@@ -210,6 +211,17 @@ public slots: ...@@ -210,6 +211,17 @@ public slots:
*/ */
void showCentralWidget(); void showCentralWidget();
public:
QGCMAVLinkLogPlayer* getLogPlayer()
{
return logPlayer;
}
MAVLinkProtocol* getMAVLink()
{
return mavlink;
}
protected: protected:
MainWindow(QWidget *parent = 0); MainWindow(QWidget *parent = 0);
...@@ -342,6 +354,7 @@ protected: ...@@ -342,6 +354,7 @@ protected:
QPointer<QGCToolBar> toolBar; QPointer<QGCToolBar> toolBar;
QGCMAVLinkLogPlayer* logPlayer;
// Popup widgets // Popup widgets
JoystickWidget* joystickWidget; JoystickWidget* joystickWidget;
......
This diff is collapsed.
...@@ -29,6 +29,10 @@ public: ...@@ -29,6 +29,10 @@ public:
~QGCMAVLinkLogPlayer(); ~QGCMAVLinkLogPlayer();
public slots: public slots:
/** @brief Toggle between play and pause */
void playPauseToggle();
/** @brief Play / pause the log */
void playPause(bool play);
/** @brief Replay the logfile */ /** @brief Replay the logfile */
void play(); void play();
/** @brief Pause the logfile */ /** @brief Pause the logfile */
...@@ -64,6 +68,7 @@ protected: ...@@ -64,6 +68,7 @@ protected:
int loopCounter; int loopCounter;
bool mavlinkLogFormat; bool mavlinkLogFormat;
int binaryBaudRate; int binaryBaudRate;
bool isPlaying;
static const int packetLen = MAVLINK_MAX_PACKET_LEN; static const int packetLen = MAVLINK_MAX_PACKET_LEN;
static const int timeLen = sizeof(quint64); static const int timeLen = sizeof(quint64);
void changeEvent(QEvent *e); void changeEvent(QEvent *e);
......
...@@ -75,32 +75,6 @@ ...@@ -75,32 +75,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="5">
<widget class="QToolButton" name="pauseButton">
<property name="toolTip">
<string>Pause the logfile</string>
</property>
<property name="statusTip">
<string>Pause the logfile</string>
</property>
<property name="whatsThis">
<string>Pause the logfile</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../mavground.qrc">
<normaloff>:/images/actions/media-playback-pause.svg</normaloff>:/images/actions/media-playback-pause.svg</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="speedLabel"> <widget class="QLabel" name="speedLabel">
<property name="toolTip"> <property name="toolTip">
...@@ -117,7 +91,23 @@ ...@@ -117,7 +91,23 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="4"> <item row="4" column="0" colspan="6">
<widget class="QSlider" name="positionSlider">
<property name="maximum">
<number>10000</number>
</property>
<property name="pageStep">
<number>100</number>
</property>
<property name="tracking">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="5">
<widget class="QToolButton" name="playButton"> <widget class="QToolButton" name="playButton">
<property name="toolTip"> <property name="toolTip">
<string>Start to replay the logfile</string> <string>Start to replay the logfile</string>
...@@ -132,7 +122,7 @@ ...@@ -132,7 +122,7 @@
<string>...</string> <string>...</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset resource="../../qgroundcontrol.qrc">
<normaloff>:/images/actions/media-playback-start.svg</normaloff>:/images/actions/media-playback-start.svg</iconset> <normaloff>:/images/actions/media-playback-start.svg</normaloff>:/images/actions/media-playback-start.svg</iconset>
</property> </property>
<property name="checkable"> <property name="checkable">
...@@ -140,26 +130,10 @@ ...@@ -140,26 +130,10 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0" colspan="6">
<widget class="QSlider" name="positionSlider">
<property name="maximum">
<number>10000</number>
</property>
<property name="pageStep">
<number>100</number>
</property>
<property name="tracking">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="../../mavground.qrc"/> <include location="../../qgroundcontrol.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>
...@@ -25,6 +25,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -25,6 +25,7 @@ This file is part of the QGROUNDCONTROL project
#include <QLabel> #include <QLabel>
#include "QGCToolBar.h" #include "QGCToolBar.h"
#include "UASManager.h" #include "UASManager.h"
#include "MainWindow.h"
QGCToolBar::QGCToolBar(QWidget *parent) : QGCToolBar::QGCToolBar(QWidget *parent) :
QToolBar(parent), QToolBar(parent),
...@@ -33,14 +34,84 @@ QGCToolBar::QGCToolBar(QWidget *parent) : ...@@ -33,14 +34,84 @@ QGCToolBar::QGCToolBar(QWidget *parent) :
mav(NULL) mav(NULL)
{ {
setObjectName("QGC_TOOLBAR"); setObjectName("QGC_TOOLBAR");
createCustomWidgets();
toggleLoggingAction = new QAction(QIcon(":"), "Logging", this);
toggleLoggingAction->setCheckable(true);
logReplayAction = new QAction(QIcon(":"), "Replay", this);
logReplayAction->setCheckable(true);
addSeparator();
addAction(toggleLoggingAction);
addAction(logReplayAction);
// CREATE TOOLBAR ITEMS
// Add internal actions
// Add MAV widget
symbolButton = new QToolButton(this);
nameLabel = new QLabel("------", this);
modeLabel = new QLabel("------", this);
stateLabel = new QLabel("------", this);
wpLabel = new QLabel("---", this);
distlabel = new QLabel("--- ---- m", this);
messageLabel = new QLabel("No system messages.", this);
//symbolButton->setIcon(":");
symbolButton->setStyleSheet("QWidget { background-color: #050508; color: #DDDDDF; background-clip: border; } QToolButton { font-weight: bold; font-size: 12px; border: 0px solid #999999; border-radius: 5px; min-width:22px; max-width: 22px; min-height: 22px; max-height: 22px; padding: 0px; margin: 0px; background-color: none; }");
addWidget(symbolButton);
addWidget(nameLabel);
addWidget(modeLabel);
addWidget(stateLabel);
addWidget(wpLabel);
addWidget(distlabel);
addWidget(messageLabel);
// DONE INITIALIZING BUTTONS
setActiveUAS(UASManager::instance()->getActiveUAS()); setActiveUAS(UASManager::instance()->getActiveUAS());
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*))); connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*)));
} }
void QGCToolBar::setLogPlayer(QGCMAVLinkLogPlayer* player)
{
connect(toggleLoggingAction, SIGNAL(triggered(bool)), player, SLOT(playPause(bool)));
connect(logReplayAction, SIGNAL(triggered(bool)), this, SLOT(logging(bool)));
}
void QGCToolBar::logging(bool enabled)
{
// Stop logging in any case
MainWindow::instance()->getMAVLink()->enableLogging(false);
if (enabled)
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Specify MAVLink log file name"), QDesktopServices::storageLocation(QDesktopServices::DesktopLocation), tr("MAVLink Logfile (*.mavlink *.log *.bin);;"));
if (!fileName.endsWith(".mavlink"))
{
fileName.append(".mavlink");
}
QFileInfo file(fileName);
if (file.exists() && !file.isWritable())
{
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText(tr("The selected logfile is not writable"));
msgBox.setInformativeText(tr("Please make sure that the file %1 is writable or select a different file").arg(fileName));
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok);
msgBox.exec();
}
else
{
MainWindow::instance()->getMAVLink()->setLogfileName(fileName);
MainWindow::instance()->getMAVLink()->enableLogging(true);
}
}
}
void QGCToolBar::addPerspectiveChangeAction(QAction* action) void QGCToolBar::addPerspectiveChangeAction(QAction* action)
{ {
addAction(action); insertAction(toggleLoggingAction, action);
} }
void QGCToolBar::setActiveUAS(UASInterface* active) void QGCToolBar::setActiveUAS(UASInterface* active)
...@@ -75,32 +146,7 @@ void QGCToolBar::setActiveUAS(UASInterface* active) ...@@ -75,32 +146,7 @@ void QGCToolBar::setActiveUAS(UASInterface* active)
void QGCToolBar::createCustomWidgets() void QGCToolBar::createCustomWidgets()
{ {
// Add internal actions
// Add MAV widget
symbolButton = new QToolButton(this);
nameLabel = new QLabel("------", this);
modeLabel = new QLabel("------", this);
stateLabel = new QLabel("------", this);
wpLabel = new QLabel("---", this);
distlabel = new QLabel("--- ---- m", this);
messageLabel = new QLabel("No system messages.", this);
//symbolButton->setIcon(":");
symbolButton->setStyleSheet("QWidget { background-color: #050508; color: #DDDDDF; background-clip: border; } QToolButton { font-weight: bold; font-size: 12px; border: 0px solid #999999; border-radius: 5px; min-width:22px; max-width: 22px; min-height: 22px; max-height: 22px; padding: 0px; margin: 0px; background-color: none; }");
addWidget(symbolButton);
addWidget(nameLabel);
addWidget(modeLabel);
addWidget(stateLabel);
addWidget(wpLabel);
addWidget(distlabel);
addWidget(messageLabel);
toggleLoggingAction = new QAction(QIcon(":"), "Start Logging", this);
logReplayAction = new QAction(QIcon(":"), "Start Replay", this);
//addAction(toggleLoggingAction);
//addAction(logReplayAction);
addSeparator();
} }
void QGCToolBar::updateState(UASInterface* system, QString name, QString description) void QGCToolBar::updateState(UASInterface* system, QString name, QString description)
......
...@@ -29,13 +29,14 @@ This file is part of the QGROUNDCONTROL project ...@@ -29,13 +29,14 @@ This file is part of the QGROUNDCONTROL project
#include <QToolButton> #include <QToolButton>
#include <QLabel> #include <QLabel>
#include "UASInterface.h" #include "UASInterface.h"
#include "QGCMAVLinkLogPlayer.h"
class QGCToolBar : public QToolBar class QGCToolBar : public QToolBar
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit QGCToolBar(QWidget *parent = 0); explicit QGCToolBar(QWidget* parent = 0);
void addPerspectiveChangeAction(QAction* action); void addPerspectiveChangeAction(QAction* action);
~QGCToolBar(); ~QGCToolBar();
...@@ -52,6 +53,10 @@ public slots: ...@@ -52,6 +53,10 @@ public slots:
void setSystemType(UASInterface* uas, unsigned int systemType); void setSystemType(UASInterface* uas, unsigned int systemType);
/** @brief Received system text message */ /** @brief Received system text message */
void receiveTextMessage(int uasid, int componentid, int severity, QString text); void receiveTextMessage(int uasid, int componentid, int severity, QString text);
/** @brief Start / stop logging */
void logging(bool enabled);
/** @brief Set log playing component */
void setLogPlayer(QGCMAVLinkLogPlayer* player);
protected: protected:
void createCustomWidgets(); void createCustomWidgets();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment