From 663aa1b779b3937a38ba06d2cfcc31a594384760 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Mon, 5 May 2014 08:58:15 +0200 Subject: [PATCH] Added file manager and associated widgets / handling --- qgroundcontrol.pro | 14 +++++-- src/uas/QGCUASFileManager.cc | 14 +++++++ src/uas/QGCUASFileManager.h | 23 +++++++++++ src/uas/UAS.cc | 1 + src/uas/UAS.h | 7 ++++ src/uas/UASInterface.h | 9 +++++ src/ui/MainWindow.cc | 2 + src/ui/MainWindow.h | 4 ++ src/ui/QGCUASFileView.cc | 18 +++++++++ src/ui/QGCUASFileView.h | 26 ++++++++++++ src/ui/QGCUASFileView.ui | 32 +++++++++++++++ src/ui/QGCUASFileViewMulti.cc | 74 +++++++++++++++++++++++++++++++++++ src/ui/QGCUASFileViewMulti.h | 36 +++++++++++++++++ src/ui/QGCUASFileViewMulti.ui | 27 +++++++++++++ 14 files changed, 284 insertions(+), 3 deletions(-) create mode 100644 src/uas/QGCUASFileManager.cc create mode 100644 src/uas/QGCUASFileManager.h create mode 100644 src/ui/QGCUASFileView.cc create mode 100644 src/ui/QGCUASFileView.h create mode 100644 src/ui/QGCUASFileView.ui create mode 100644 src/ui/QGCUASFileViewMulti.cc create mode 100644 src/ui/QGCUASFileViewMulti.h create mode 100644 src/ui/QGCUASFileViewMulti.ui diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 135006d54..9e9072ab4 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -292,6 +292,7 @@ FORMS += \ src/ui/designer/QGCCommandButton.ui \ src/ui/QGCMAVLinkLogPlayer.ui \ src/ui/QGCWaypointListMulti.ui \ + src/ui/QGCUASFileViewMulti.ui \ src/ui/QGCUDPLinkConfiguration.ui \ src/ui/QGCTCPLinkConfiguration.ui \ src/ui/QGCSettingsWidget.ui \ @@ -369,7 +370,8 @@ FORMS += \ src/ui/px4_configuration/QGCPX4AirframeConfig.ui \ src/ui/px4_configuration/QGCPX4MulticopterConfig.ui \ src/ui/px4_configuration/QGCPX4SensorCalibration.ui \ - src/ui/designer/QGCXYPlot.ui + src/ui/designer/QGCXYPlot.ui \ + src/ui/QGCUASFileView.ui HEADERS += \ src/MG.h \ @@ -457,6 +459,7 @@ HEADERS += \ src/comm/MAVLinkSimulationMAV.h \ src/uas/QGCMAVLinkUASFactory.h \ src/ui/QGCWaypointListMulti.h \ + src/ui/QGCUASFileViewMulti.h \ src/ui/QGCUDPLinkConfiguration.h \ src/ui/QGCTCPLinkConfiguration.h \ src/ui/QGCSettingsWidget.h \ @@ -562,7 +565,9 @@ HEADERS += \ src/ui/designer/QGCXYPlot.h \ src/ui/menuactionhelper.h \ src/uas/UASManagerInterface.h \ - src/uas/QGCUASParamManagerInterface.h + src/uas/QGCUASParamManagerInterface.h \ + src/uas/QGCUASFileManager.h \ + src/ui/QGCUASFileView.h SOURCES += \ src/main.cc \ @@ -644,6 +649,7 @@ SOURCES += \ src/comm/MAVLinkSimulationMAV.cc \ src/uas/QGCMAVLinkUASFactory.cc \ src/ui/QGCWaypointListMulti.cc \ + src/ui/QGCUASFileViewMulti.cc \ src/ui/QGCUDPLinkConfiguration.cc \ src/ui/QGCTCPLinkConfiguration.cc \ src/ui/QGCSettingsWidget.cc \ @@ -745,4 +751,6 @@ SOURCES += \ src/ui/px4_configuration/QGCPX4MulticopterConfig.cc \ src/ui/px4_configuration/QGCPX4SensorCalibration.cc \ src/ui/designer/QGCXYPlot.cc \ - src/ui/menuactionhelper.cpp + src/ui/menuactionhelper.cpp \ + src/uas/QGCUASFileManager.cc \ + src/ui/QGCUASFileView.cc diff --git a/src/uas/QGCUASFileManager.cc b/src/uas/QGCUASFileManager.cc new file mode 100644 index 000000000..c900bfdda --- /dev/null +++ b/src/uas/QGCUASFileManager.cc @@ -0,0 +1,14 @@ +#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); +} diff --git a/src/uas/QGCUASFileManager.h b/src/uas/QGCUASFileManager.h new file mode 100644 index 000000000..d1d12882b --- /dev/null +++ b/src/uas/QGCUASFileManager.h @@ -0,0 +1,23 @@ +#ifndef QGCUASFILEMANAGER_H +#define QGCUASFILEMANAGER_H + +#include +#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 diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index 018611c23..43f3bc786 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -139,6 +139,7 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(), airSpeed(std::numeric_limits::quiet_NaN()), groundSpeed(std::numeric_limits::quiet_NaN()), waypointManager(this), + fileManager(this, this), attitudeKnown(false), attitudeStamped(false), diff --git a/src/uas/UAS.h b/src/uas/UAS.h index ed90a1b5c..a7e0bc5be 100644 --- a/src/uas/UAS.h +++ b/src/uas/UAS.h @@ -41,6 +41,7 @@ This file is part of the QGROUNDCONTROL project #include "QGCJSBSimLink.h" #include "QGCXPlaneLink.h" #include "QGCUASParamManager.h" +#include "QGCUASFileManager.h" /** @@ -369,6 +370,7 @@ public: #endif friend class UASWaypointManager; + friend class QGCUASFileManager; protected: //COMMENTS FOR TEST UNIT /// LINK ID AND STATUS @@ -471,6 +473,7 @@ protected: //COMMENTS FOR TEST UNIT double groundSpeed; ///< Groundspeed double bearingToWaypoint; ///< Bearing to next waypoint UASWaypointManager waypointManager; + QGCUASFileManager fileManager; /// ATTITUDE bool attitudeKnown; ///< True if attitude was received, false else @@ -552,6 +555,10 @@ public: return ¶mMgr; } + virtual QGCUASFileManager* getFileManager() { + return &fileManager; + } + /** @brief Get the HIL simulation */ QGCHilLink* getHILSimulation() const { return simulation; diff --git a/src/uas/UASInterface.h b/src/uas/UASInterface.h index 6395674ea..64ac3d222 100644 --- a/src/uas/UASInterface.h +++ b/src/uas/UASInterface.h @@ -52,6 +52,8 @@ This file is part of the QGROUNDCONTROL project #endif #endif +class QGCUASFileManager; + enum BatteryType { NICD = 0, @@ -158,6 +160,13 @@ public: /** @brief Get reference to the param manager **/ 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 */ enum CommStatus { diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index f6b71c5a2..2d22446c1 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -71,6 +71,7 @@ This file is part of the QGROUNDCONTROL project #include "SerialSettingsDialog.h" #include "terminalconsole.h" #include "menuactionhelper.h" +#include "QGCUASFileViewMulti.h" // Add support for the MAVLink generator UI if it's been requested. #ifdef QGC_MAVGEN_ENABLED @@ -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 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); menuActionHelper->createToolAction(tr("Status Details"), "UAS_STATUS_DETAILS_DOCKWIDGET"); diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index 8e2ee961b..6bebb48d7 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -76,6 +76,7 @@ This file is part of the QGROUNDCONTROL project #include "QGCMAVLinkLogPlayer.h" #include "QGCVehicleConfig.h" #include "MAVLinkDecoder.h" +#include "QGCUASFileViewMulti.h" class QGCMapTool; class QGCMAVLinkMessageSender; @@ -86,6 +87,7 @@ class Linecharts; class QGCDataPlot2D; class JoystickWidget; class MenuActionHelper; +class QGCUASFileViewMulti; /** * @brief Main Application Window @@ -463,6 +465,8 @@ protected: QGCMAVLinkLogPlayer* logPlayer; QMap hilDocks; + QPointer fileWidget; + // Popup widgets JoystickWidget* joystickWidget; diff --git a/src/ui/QGCUASFileView.cc b/src/ui/QGCUASFileView.cc new file mode 100644 index 000000000..4f9a4e9d1 --- /dev/null +++ b/src/ui/QGCUASFileView.cc @@ -0,0 +1,18 @@ +#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; +} diff --git a/src/ui/QGCUASFileView.h b/src/ui/QGCUASFileView.h new file mode 100644 index 000000000..92f179a48 --- /dev/null +++ b/src/ui/QGCUASFileView.h @@ -0,0 +1,26 @@ +#ifndef QGCUASFILEVIEW_H +#define QGCUASFILEVIEW_H + +#include +#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 diff --git a/src/ui/QGCUASFileView.ui b/src/ui/QGCUASFileView.ui new file mode 100644 index 000000000..2304a783c --- /dev/null +++ b/src/ui/QGCUASFileView.ui @@ -0,0 +1,32 @@ + + + QGCUASFileView + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 30 + 20 + 114 + 32 + + + + Test + + + + + + diff --git a/src/ui/QGCUASFileViewMulti.cc b/src/ui/QGCUASFileViewMulti.cc new file mode 100644 index 000000000..fb627ea04 --- /dev/null +++ b/src/ui/QGCUASFileViewMulti.cc @@ -0,0 +1,74 @@ +#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(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; + } +} diff --git a/src/ui/QGCUASFileViewMulti.h b/src/ui/QGCUASFileViewMulti.h new file mode 100644 index 000000000..6b77613ec --- /dev/null +++ b/src/ui/QGCUASFileViewMulti.h @@ -0,0 +1,36 @@ +#ifndef QGCUASFILEVIEWMULTI_H +#define QGCUASFILEVIEWMULTI_H + +#include +#include + +#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 lists; + +private: + Ui::QGCUASFileViewMulti *ui; +}; + +#endif // QGCUASFILEVIEWMULTI_H diff --git a/src/ui/QGCUASFileViewMulti.ui b/src/ui/QGCUASFileViewMulti.ui new file mode 100644 index 000000000..169c00a1f --- /dev/null +++ b/src/ui/QGCUASFileViewMulti.ui @@ -0,0 +1,27 @@ + + + QGCUASFileViewMulti + + + + 0 + 0 + 400 + 300 + + + + Form + + + + 0 + + + + + + + + + -- 2.22.0