Commit 663aa1b7 authored by Lorenz Meier's avatar Lorenz Meier

Added file manager and associated widgets / handling

parent f6f05a11
...@@ -292,6 +292,7 @@ FORMS += \ ...@@ -292,6 +292,7 @@ FORMS += \
src/ui/designer/QGCCommandButton.ui \ src/ui/designer/QGCCommandButton.ui \
src/ui/QGCMAVLinkLogPlayer.ui \ src/ui/QGCMAVLinkLogPlayer.ui \
src/ui/QGCWaypointListMulti.ui \ src/ui/QGCWaypointListMulti.ui \
src/ui/QGCUASFileViewMulti.ui \
src/ui/QGCUDPLinkConfiguration.ui \ src/ui/QGCUDPLinkConfiguration.ui \
src/ui/QGCTCPLinkConfiguration.ui \ src/ui/QGCTCPLinkConfiguration.ui \
src/ui/QGCSettingsWidget.ui \ src/ui/QGCSettingsWidget.ui \
...@@ -369,7 +370,8 @@ FORMS += \ ...@@ -369,7 +370,8 @@ FORMS += \
src/ui/px4_configuration/QGCPX4AirframeConfig.ui \ src/ui/px4_configuration/QGCPX4AirframeConfig.ui \
src/ui/px4_configuration/QGCPX4MulticopterConfig.ui \ src/ui/px4_configuration/QGCPX4MulticopterConfig.ui \
src/ui/px4_configuration/QGCPX4SensorCalibration.ui \ src/ui/px4_configuration/QGCPX4SensorCalibration.ui \
src/ui/designer/QGCXYPlot.ui src/ui/designer/QGCXYPlot.ui \
src/ui/QGCUASFileView.ui
HEADERS += \ HEADERS += \
src/MG.h \ src/MG.h \
...@@ -457,6 +459,7 @@ HEADERS += \ ...@@ -457,6 +459,7 @@ HEADERS += \
src/comm/MAVLinkSimulationMAV.h \ src/comm/MAVLinkSimulationMAV.h \
src/uas/QGCMAVLinkUASFactory.h \ src/uas/QGCMAVLinkUASFactory.h \
src/ui/QGCWaypointListMulti.h \ src/ui/QGCWaypointListMulti.h \
src/ui/QGCUASFileViewMulti.h \
src/ui/QGCUDPLinkConfiguration.h \ src/ui/QGCUDPLinkConfiguration.h \
src/ui/QGCTCPLinkConfiguration.h \ src/ui/QGCTCPLinkConfiguration.h \
src/ui/QGCSettingsWidget.h \ src/ui/QGCSettingsWidget.h \
...@@ -562,7 +565,9 @@ HEADERS += \ ...@@ -562,7 +565,9 @@ HEADERS += \
src/ui/designer/QGCXYPlot.h \ src/ui/designer/QGCXYPlot.h \
src/ui/menuactionhelper.h \ src/ui/menuactionhelper.h \
src/uas/UASManagerInterface.h \ src/uas/UASManagerInterface.h \
src/uas/QGCUASParamManagerInterface.h src/uas/QGCUASParamManagerInterface.h \
src/uas/QGCUASFileManager.h \
src/ui/QGCUASFileView.h
SOURCES += \ SOURCES += \
src/main.cc \ src/main.cc \
...@@ -644,6 +649,7 @@ SOURCES += \ ...@@ -644,6 +649,7 @@ SOURCES += \
src/comm/MAVLinkSimulationMAV.cc \ src/comm/MAVLinkSimulationMAV.cc \
src/uas/QGCMAVLinkUASFactory.cc \ src/uas/QGCMAVLinkUASFactory.cc \
src/ui/QGCWaypointListMulti.cc \ src/ui/QGCWaypointListMulti.cc \
src/ui/QGCUASFileViewMulti.cc \
src/ui/QGCUDPLinkConfiguration.cc \ src/ui/QGCUDPLinkConfiguration.cc \
src/ui/QGCTCPLinkConfiguration.cc \ src/ui/QGCTCPLinkConfiguration.cc \
src/ui/QGCSettingsWidget.cc \ src/ui/QGCSettingsWidget.cc \
...@@ -745,4 +751,6 @@ SOURCES += \ ...@@ -745,4 +751,6 @@ SOURCES += \
src/ui/px4_configuration/QGCPX4MulticopterConfig.cc \ src/ui/px4_configuration/QGCPX4MulticopterConfig.cc \
src/ui/px4_configuration/QGCPX4SensorCalibration.cc \ src/ui/px4_configuration/QGCPX4SensorCalibration.cc \
src/ui/designer/QGCXYPlot.cc \ src/ui/designer/QGCXYPlot.cc \
src/ui/menuactionhelper.cpp src/ui/menuactionhelper.cpp \
src/uas/QGCUASFileManager.cc \
src/ui/QGCUASFileView.cc
#include "QGCUASFileManager.h"
#include "QGC.h"
QGCUASFileManager::QGCUASFileManager(QObject* parent, UASInterface* uas) :
QObject(parent),
_mav(uas)
{
}
void QGCUASFileManager::nothingMessage() {
mavlink_message_t message;
_mav->sendMessage(message);
}
#ifndef QGCUASFILEMANAGER_H
#define QGCUASFILEMANAGER_H
#include <QObject>
#include "UASInterface.h"
class QGCUASFileManager : public QObject
{
Q_OBJECT
public:
QGCUASFileManager(QObject* parent, UASInterface* uas);
signals:
public slots:
void nothingMessage();
protected:
UASInterface* _mav;
};
#endif // QGCUASFILEMANAGER_H
...@@ -139,6 +139,7 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(), ...@@ -139,6 +139,7 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(),
airSpeed(std::numeric_limits<double>::quiet_NaN()), airSpeed(std::numeric_limits<double>::quiet_NaN()),
groundSpeed(std::numeric_limits<double>::quiet_NaN()), groundSpeed(std::numeric_limits<double>::quiet_NaN()),
waypointManager(this), waypointManager(this),
fileManager(this, this),
attitudeKnown(false), attitudeKnown(false),
attitudeStamped(false), attitudeStamped(false),
......
...@@ -41,6 +41,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -41,6 +41,7 @@ This file is part of the QGROUNDCONTROL project
#include "QGCJSBSimLink.h" #include "QGCJSBSimLink.h"
#include "QGCXPlaneLink.h" #include "QGCXPlaneLink.h"
#include "QGCUASParamManager.h" #include "QGCUASParamManager.h"
#include "QGCUASFileManager.h"
/** /**
...@@ -369,6 +370,7 @@ public: ...@@ -369,6 +370,7 @@ public:
#endif #endif
friend class UASWaypointManager; friend class UASWaypointManager;
friend class QGCUASFileManager;
protected: //COMMENTS FOR TEST UNIT protected: //COMMENTS FOR TEST UNIT
/// LINK ID AND STATUS /// LINK ID AND STATUS
...@@ -471,6 +473,7 @@ protected: //COMMENTS FOR TEST UNIT ...@@ -471,6 +473,7 @@ protected: //COMMENTS FOR TEST UNIT
double groundSpeed; ///< Groundspeed double groundSpeed; ///< Groundspeed
double bearingToWaypoint; ///< Bearing to next waypoint double bearingToWaypoint; ///< Bearing to next waypoint
UASWaypointManager waypointManager; UASWaypointManager waypointManager;
QGCUASFileManager fileManager;
/// ATTITUDE /// ATTITUDE
bool attitudeKnown; ///< True if attitude was received, false else bool attitudeKnown; ///< True if attitude was received, false else
...@@ -552,6 +555,10 @@ public: ...@@ -552,6 +555,10 @@ public:
return &paramMgr; return &paramMgr;
} }
virtual QGCUASFileManager* getFileManager() {
return &fileManager;
}
/** @brief Get the HIL simulation */ /** @brief Get the HIL simulation */
QGCHilLink* getHILSimulation() const { QGCHilLink* getHILSimulation() const {
return simulation; return simulation;
......
...@@ -52,6 +52,8 @@ This file is part of the QGROUNDCONTROL project ...@@ -52,6 +52,8 @@ This file is part of the QGROUNDCONTROL project
#endif #endif
#endif #endif
class QGCUASFileManager;
enum BatteryType enum BatteryType
{ {
NICD = 0, NICD = 0,
...@@ -158,6 +160,13 @@ public: ...@@ -158,6 +160,13 @@ public:
/** @brief Get reference to the param manager **/ /** @brief Get reference to the param manager **/
virtual QGCUASParamManagerInterface* getParamManager() = 0; virtual QGCUASParamManagerInterface* getParamManager() = 0;
virtual QGCUASFileManager* getFileManager() = 0;
/** @brief Send a message over this link (to this or to all UAS on this link) */
virtual void sendMessage(LinkInterface* link, mavlink_message_t message) = 0;
/** @brief Send a message over all links this UAS can be reached with (!= all links) */
virtual void sendMessage(mavlink_message_t message) = 0;
/* COMMUNICATION FLAGS */ /* COMMUNICATION FLAGS */
enum CommStatus { enum CommStatus {
......
...@@ -71,6 +71,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -71,6 +71,7 @@ This file is part of the QGROUNDCONTROL project
#include "SerialSettingsDialog.h" #include "SerialSettingsDialog.h"
#include "terminalconsole.h" #include "terminalconsole.h"
#include "menuactionhelper.h" #include "menuactionhelper.h"
#include "QGCUASFileViewMulti.h"
// Add support for the MAVLink generator UI if it's been requested. // Add support for the MAVLink generator UI if it's been requested.
#ifdef QGC_MAVGEN_ENABLED #ifdef QGC_MAVGEN_ENABLED
...@@ -615,6 +616,7 @@ void MainWindow::buildCommonWidgets() ...@@ -615,6 +616,7 @@ void MainWindow::buildCommonWidgets()
createDockWidget(engineeringView,new QGCMAVLinkInspector(mavlink,this),tr("MAVLink Inspector"),"MAVLINK_INSPECTOR_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea); createDockWidget(engineeringView,new QGCMAVLinkInspector(mavlink,this),tr("MAVLink Inspector"),"MAVLINK_INSPECTOR_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea);
createDockWidget(engineeringView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea); createDockWidget(engineeringView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea);
createDockWidget(engineeringView,new QGCUASFileViewMulti(this),tr("Onboard Files"),"FILE_VIEW_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea);
createDockWidget(simView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_SIMULATION,Qt::RightDockWidgetArea); createDockWidget(simView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_SIMULATION,Qt::RightDockWidgetArea);
menuActionHelper->createToolAction(tr("Status Details"), "UAS_STATUS_DETAILS_DOCKWIDGET"); menuActionHelper->createToolAction(tr("Status Details"), "UAS_STATUS_DETAILS_DOCKWIDGET");
......
...@@ -76,6 +76,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -76,6 +76,7 @@ This file is part of the QGROUNDCONTROL project
#include "QGCMAVLinkLogPlayer.h" #include "QGCMAVLinkLogPlayer.h"
#include "QGCVehicleConfig.h" #include "QGCVehicleConfig.h"
#include "MAVLinkDecoder.h" #include "MAVLinkDecoder.h"
#include "QGCUASFileViewMulti.h"
class QGCMapTool; class QGCMapTool;
class QGCMAVLinkMessageSender; class QGCMAVLinkMessageSender;
...@@ -86,6 +87,7 @@ class Linecharts; ...@@ -86,6 +87,7 @@ class Linecharts;
class QGCDataPlot2D; class QGCDataPlot2D;
class JoystickWidget; class JoystickWidget;
class MenuActionHelper; class MenuActionHelper;
class QGCUASFileViewMulti;
/** /**
* @brief Main Application Window * @brief Main Application Window
...@@ -463,6 +465,8 @@ protected: ...@@ -463,6 +465,8 @@ protected:
QGCMAVLinkLogPlayer* logPlayer; QGCMAVLinkLogPlayer* logPlayer;
QMap<int, QDockWidget*> hilDocks; QMap<int, QDockWidget*> hilDocks;
QPointer<QGCUASFileViewMulti> fileWidget;
// Popup widgets // Popup widgets
JoystickWidget* joystickWidget; JoystickWidget* joystickWidget;
......
#include "QGCUASFileView.h"
#include "uas/QGCUASFileManager.h"
#include "ui_QGCUASFileView.h"
QGCUASFileView::QGCUASFileView(QWidget *parent, QGCUASFileManager *manager) :
QWidget(parent),
_manager(manager),
ui(new Ui::QGCUASFileView)
{
ui->setupUi(this);
connect(ui->testButton, SIGNAL(clicked()), _manager, SLOT(nothingMessage()));
}
QGCUASFileView::~QGCUASFileView()
{
delete ui;
}
#ifndef QGCUASFILEVIEW_H
#define QGCUASFILEVIEW_H
#include <QWidget>
#include "uas/QGCUASFileManager.h"
namespace Ui {
class QGCUASFileView;
}
class QGCUASFileView : public QWidget
{
Q_OBJECT
public:
explicit QGCUASFileView(QWidget *parent, QGCUASFileManager *manager);
~QGCUASFileView();
protected:
QGCUASFileManager* _manager;
private:
Ui::QGCUASFileView *ui;
};
#endif // QGCUASFILEVIEW_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QGCUASFileView</class>
<widget class="QWidget" name="QGCUASFileView">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QPushButton" name="testButton">
<property name="geometry">
<rect>
<x>30</x>
<y>20</y>
<width>114</width>
<height>32</height>
</rect>
</property>
<property name="text">
<string>Test</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
#include "QGCUASFileViewMulti.h"
#include "ui_QGCUASFileViewMulti.h"
#include "UASInterface.h"
#include "UASManager.h"
#include "QGCUASFileView.h"
QGCUASFileViewMulti::QGCUASFileViewMulti(QWidget *parent) :
QWidget(parent),
ui(new Ui::QGCUASFileViewMulti)
{
ui->setupUi(this);
setMinimumSize(600, 80);
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(systemCreated(UASInterface*)));
connect(UASManager::instance(), SIGNAL(activeUASSet(int)), this, SLOT(systemSetActive(int)));
if (UASManager::instance()->getActiveUAS()) {
systemCreated(UASManager::instance()->getActiveUAS());
systemSetActive(UASManager::instance()->getActiveUAS()->getUASID());
}
}
void QGCUASFileViewMulti::systemDeleted(QObject* uas)
{
UASInterface* mav = dynamic_cast<UASInterface*>(uas);
if (mav)
{
int id = mav->getUASID();
QGCUASFileView* list = lists.value(id, NULL);
if (list)
{
delete list;
lists.remove(id);
}
}
}
void QGCUASFileViewMulti::systemCreated(UASInterface* uas)
{
if (!uas) {
return;
}
QGCUASFileView* list = new QGCUASFileView(ui->stackedWidget, uas->getFileManager());
lists.insert(uas->getUASID(), list);
ui->stackedWidget->addWidget(list);
// Ensure widget is deleted when system is deleted
connect(uas, SIGNAL(destroyed(QObject*)), this, SLOT(systemDeleted(QObject*)));
}
void QGCUASFileViewMulti::systemSetActive(int uas)
{
QGCUASFileView* list = lists.value(uas, NULL);
if (list) {
ui->stackedWidget->setCurrentWidget(list);
}
}
QGCUASFileViewMulti::~QGCUASFileViewMulti()
{
delete ui;
}
void QGCUASFileViewMulti::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
#ifndef QGCUASFILEVIEWMULTI_H
#define QGCUASFILEVIEWMULTI_H
#include <QWidget>
#include <QMap>
#include "QGCUASFileView.h"
#include "UASInterface.h"
namespace Ui
{
class QGCUASFileViewMulti;
}
class QGCUASFileViewMulti : public QWidget
{
Q_OBJECT
public:
explicit QGCUASFileViewMulti(QWidget *parent = 0);
~QGCUASFileViewMulti();
public slots:
void systemDeleted(QObject* uas);
void systemCreated(UASInterface* uas);
void systemSetActive(int uas);
protected:
void changeEvent(QEvent *e);
QMap<int, QGCUASFileView*> lists;
private:
Ui::QGCUASFileViewMulti *ui;
};
#endif // QGCUASFILEVIEWMULTI_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QGCUASFileViewMulti</class>
<widget class="QWidget" name="QGCUASFileViewMulti">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QStackedWidget" name="stackedWidget"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
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