From a57b38241846e3cddfabaa0b937a441d549e41b2 Mon Sep 17 00:00:00 2001 From: lm Date: Mon, 21 Feb 2011 14:53:16 +0100 Subject: [PATCH] Started parameter interface refactoring to adhere to MVC design pattern. Working on getting custom widgets completely up and running --- qgroundcontrol.pro | 14 +- src/uas/QGCUASParamManager.cc | 32 +++++ src/uas/QGCUASParamManager.h | 50 +++++++ src/uas/UAS.cc | 5 +- src/uas/UAS.h | 6 + src/uas/UASInterface.h | 6 + src/ui/QGCParamWidget.cc | 14 +- src/ui/QGCParamWidget.h | 19 +-- src/ui/WaypointView.cc | 34 +++-- src/ui/designer/QGCParamSlider.ui | 79 ++++++++--- src/ui/designer/QGCToolWidget.cc | 22 ++- src/ui/designer/QGCToolWidget.h | 6 + src/ui/mission/QGCMissionConditionWidget.cc | 14 ++ src/ui/mission/QGCMissionConditionWidget.h | 22 +++ src/ui/mission/QGCMissionConditionWidget.ui | 145 ++++++++++++++++++++ src/ui/mission/QGCMissionDoWidget.cc | 14 ++ src/ui/mission/QGCMissionDoWidget.h | 22 +++ src/ui/mission/QGCMissionDoWidget.ui | 67 +++++++++ 18 files changed, 507 insertions(+), 64 deletions(-) create mode 100644 src/uas/QGCUASParamManager.cc create mode 100644 src/uas/QGCUASParamManager.h create mode 100644 src/ui/mission/QGCMissionConditionWidget.cc create mode 100644 src/ui/mission/QGCMissionConditionWidget.h create mode 100644 src/ui/mission/QGCMissionConditionWidget.ui create mode 100644 src/ui/mission/QGCMissionDoWidget.cc create mode 100644 src/ui/mission/QGCMissionDoWidget.h create mode 100644 src/ui/mission/QGCMissionDoWidget.ui diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 40b68c247..02262c1ba 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -157,7 +157,9 @@ FORMS += src/ui/MainWindow.ui \ src/ui/QGCWaypointListMulti.ui \ src/ui/mission/QGCCustomWaypointAction.ui \ src/ui/QGCUDPLinkConfiguration.ui \ - src/ui/QGCSettingsWidget.ui + src/ui/QGCSettingsWidget.ui \ + src/ui/mission/QGCMissionDoWidget.ui \ + src/ui/mission/QGCMissionConditionWidget.ui INCLUDEPATH += src \ src/ui \ @@ -269,7 +271,10 @@ HEADERS += src/MG.h \ src/uas/QGCMAVLinkUASFactory.h \ src/ui/QGCWaypointListMulti.h \ src/ui/QGCUDPLinkConfiguration.h \ - src/ui/QGCSettingsWidget.h + src/ui/QGCSettingsWidget.h \ + src/ui/mission/QGCMissionDoWidget.h \ + src/ui/mission/QGCMissionConditionWidget.h \ + src/uas/QGCUASParamManager.h # Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler macx|win32-msvc2008: { @@ -396,7 +401,10 @@ SOURCES += src/main.cc \ src/uas/QGCMAVLinkUASFactory.cc \ src/ui/QGCWaypointListMulti.cc \ src/ui/QGCUDPLinkConfiguration.cc \ - src/ui/QGCSettingsWidget.cc + src/ui/QGCSettingsWidget.cc \ + src/ui/mission/QGCMissionDoWidget.cc \ + src/ui/mission/QGCMissionConditionWidget.cc \ + src/uas/QGCUASParamManager.cc macx|win32-msvc2008: { SOURCES += src/ui/map3D/QGCGoogleEarthView.cc diff --git a/src/uas/QGCUASParamManager.cc b/src/uas/QGCUASParamManager.cc new file mode 100644 index 000000000..93ab410e2 --- /dev/null +++ b/src/uas/QGCUASParamManager.cc @@ -0,0 +1,32 @@ +#include "QGCUASParamManager.h" +#include "UASInterface.h" + +QGCUASParamManager::QGCUASParamManager(UASInterface* uas, QWidget *parent) : + QWidget(parent), + mav(uas), + transmissionListMode(false), + transmissionActive(false), + transmissionTimeout(0), + retransmissionTimeout(350), + rewriteTimeout(500), + retransmissionBurstRequestSize(2) +{ + uas->setParamManager(this); +} + + +/** + * The .. signal is emitted + */ +void QGCUASParamManager::requestParameterListUpdate(int component) +{ + +} + +/** + * The .. signal is emitted + */ +void QGCUASParamManager::requestParameterUpdate(int component, const QString& parameter) +{ + +} diff --git a/src/uas/QGCUASParamManager.h b/src/uas/QGCUASParamManager.h new file mode 100644 index 000000000..6e4296ee9 --- /dev/null +++ b/src/uas/QGCUASParamManager.h @@ -0,0 +1,50 @@ +#ifndef QGCUASPARAMMANAGER_H +#define QGCUASPARAMMANAGER_H + +#include +#include +#include + +class UASInterface; + +class QGCUASParamManager : public QWidget +{ + Q_OBJECT +public: + QGCUASParamManager(UASInterface* uas, QWidget *parent = 0); + + QList getParameterNames(int component) const { return parameters.value(component)->keys(); } + QList getParameterValues(int component) const { return parameters.value(component)->values(); } + float getParameterValue(int component, const QString& parameter) const { return parameters.value(component)->value(parameter); } + + /** @brief Request an update for the parameter list */ + void requestParameterListUpdate(int component = 0); + /** @brief Request an update for this specific parameter */ + void requestParameterUpdate(int component, const QString& parameter); + +signals: + void parameterChanged(int component, QString parameter, float value); + void parameterChanged(int component, int parameterIndex, float value); + void parameterListUpToDate(int component); + +public slots: + +protected: + UASInterface* mav; ///< The MAV this widget is controlling + QMap* > changedValues; ///< Changed values + QMap* > parameters; ///< All parameters + QVector received; ///< Successfully received parameters + QMap* > transmissionMissingPackets; ///< Missing packets + QMap* > transmissionMissingWriteAckPackets; ///< Missing write ACK packets + bool transmissionListMode; ///< Currently requesting list + QMap transmissionListSizeKnown; ///< List size initialized? + bool transmissionActive; ///< Missing packets, working on list? + quint64 transmissionTimeout; ///< Timeout + QTimer retransmissionTimer; ///< Timer handling parameter retransmission + int retransmissionTimeout; ///< Retransmission request timeout, in milliseconds + int rewriteTimeout; ///< Write request timeout, in milliseconds + int retransmissionBurstRequestSize; ///< Number of packets requested for retransmission per burst + +}; + +#endif // QGCUASPARAMMANAGER_H diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index a16ac8698..f47e7823d 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -29,7 +29,7 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(), uasId(id), -startTime(MG::TIME::getGroundTimeNow()), +startTime(QGC::groundTimeMilliseconds()), commStatus(COMM_DISCONNECTED), name(""), autopilot(-1), @@ -73,7 +73,8 @@ yaw(0.0), statusTimeout(new QTimer(this)), paramsOnceRequested(false), airframe(0), -attitudeKnown(false) +attitudeKnown(false), +paramManager(NULL) { color = UASInterface::getNextColor(); setBattery(LIPOLY, 3); diff --git a/src/uas/UAS.h b/src/uas/UAS.h index a9e68cf23..251d9fab9 100644 --- a/src/uas/UAS.h +++ b/src/uas/UAS.h @@ -176,6 +176,7 @@ protected: //COMMENTS FOR TEST UNIT bool paramsOnceRequested; ///< If the parameter list has been read at least once int airframe; ///< The airframe type bool attitudeKnown; ///< True if attitude was received, false else + QGCUASParamManager* paramManager; ///< Parameter manager class public: /** @brief Set the current battery type */ @@ -192,6 +193,11 @@ public: bool isAuto(); UASWaypointManager* getWaypointManager() { return &waypointManager; } + /** @brief Get reference to the param manager **/ + QGCUASParamManager* getParamManager() const { return paramManager; } + // TODO Will be removed + /** @brief Set reference to the param manager **/ + void setParamManager(QGCUASParamManager* manager) { paramManager = manager; } int getSystemType(); QImage getImage(); void requestImage(); // ? diff --git a/src/uas/UASInterface.h b/src/uas/UASInterface.h index 1b92baf0f..9cffc7085 100644 --- a/src/uas/UASInterface.h +++ b/src/uas/UASInterface.h @@ -41,6 +41,7 @@ This file is part of the QGROUNDCONTROL project #include "LinkInterface.h" #include "ProtocolInterface.h" #include "UASWaypointManager.h" +#include "QGCUASParamManager.h" #include "RadioCalibration/RadioCalibrationData.h" /** @@ -85,6 +86,11 @@ public: /** @brief Get reference to the waypoint manager **/ virtual UASWaypointManager* getWaypointManager(void) = 0; + /** @brief Get reference to the param manager **/ + virtual QGCUASParamManager* getParamManager() const = 0; + // TODO Will be removed + /** @brief Set reference to the param manager **/ + virtual void setParamManager(QGCUASParamManager* manager) = 0; /* COMMUNICATION FLAGS */ diff --git a/src/ui/QGCParamWidget.cc b/src/ui/QGCParamWidget.cc index d28933862..ad79618e4 100644 --- a/src/ui/QGCParamWidget.cc +++ b/src/ui/QGCParamWidget.cc @@ -43,18 +43,8 @@ This file is part of the QGROUNDCONTROL project * @param parent Parent widget */ QGCParamWidget::QGCParamWidget(UASInterface* uas, QWidget *parent) : - QWidget(parent), - mav(uas), - components(new QMap()), - paramGroups(), - changedValues(), - parameters(), - transmissionListMode(false), - transmissionActive(false), - transmissionTimeout(0), - retransmissionTimeout(350), - rewriteTimeout(500), - retransmissionBurstRequestSize(2) + QGCUASParamManager(uas, parent), + components(new QMap()) { // Load settings loadSettings(); diff --git a/src/ui/QGCParamWidget.h b/src/ui/QGCParamWidget.h index c12b08925..67db9a2d1 100644 --- a/src/ui/QGCParamWidget.h +++ b/src/ui/QGCParamWidget.h @@ -37,16 +37,17 @@ This file is part of the QGROUNDCONTROL project #include #include +#include "QGCUASParamManager.h" #include "UASInterface.h" /** * @brief Widget to read/set onboard parameters */ -class QGCParamWidget : public QWidget +class QGCParamWidget : public QGCUASParamManager { Q_OBJECT public: - explicit QGCParamWidget(UASInterface* uas, QWidget *parent = 0); + QGCParamWidget(UASInterface* uas, QWidget *parent = 0); /** @brief Get the UAS of this widget */ UASInterface* getUAS(); signals: @@ -85,24 +86,10 @@ public slots: void retransmissionGuardTick(); protected: - UASInterface* mav; ///< The MAV this widget is controlling QTreeWidget* tree; ///< The parameter tree QLabel* statusLabel; ///< Parameter transmission label QMap* components; ///< The list of components QMap* > paramGroups; ///< Parameter groups - QMap* > changedValues; ///< Changed values - QMap* > parameters; ///< All parameters - QVector received; ///< Successfully received parameters - QMap* > transmissionMissingPackets; ///< Missing packets - QMap* > transmissionMissingWriteAckPackets; ///< Missing write ACK packets - bool transmissionListMode; ///< Currently requesting list - QMap transmissionListSizeKnown; ///< List size initialized? - bool transmissionActive; ///< Missing packets, working on list? - quint64 transmissionTimeout; ///< Timeout - QTimer retransmissionTimer; ///< Timer handling parameter retransmission - int retransmissionTimeout; ///< Retransmission request timeout, in milliseconds - int rewriteTimeout; ///< Write request timeout, in milliseconds - int retransmissionBurstRequestSize; ///< Number of packets requested for retransmission per burst /** @brief Activate / deactivate parameter retransmission */ void setRetransmissionGuardEnabled(bool enabled); diff --git a/src/ui/WaypointView.cc b/src/ui/WaypointView.cc index ef6515949..a72445979 100644 --- a/src/ui/WaypointView.cc +++ b/src/ui/WaypointView.cc @@ -36,19 +36,18 @@ WaypointView::WaypointView(Waypoint* wp, QWidget* parent) : customCommand->setupUi(m_ui->customActionWidget); // add actions - m_ui->comboBox_action->addItem(tr("Navigate"),MAV_CMD_NAV_WAYPOINT); - m_ui->comboBox_action->addItem(tr("TakeOff"),MAV_CMD_NAV_TAKEOFF); - m_ui->comboBox_action->addItem(tr("Loiter Unlim."),MAV_CMD_NAV_LOITER_UNLIM); - m_ui->comboBox_action->addItem(tr("Loiter Time"),MAV_CMD_NAV_LOITER_TIME); - m_ui->comboBox_action->addItem(tr("Loiter Turns"),MAV_CMD_NAV_LOITER_TURNS); - m_ui->comboBox_action->addItem(tr("Ret. to Launch"),MAV_CMD_NAV_RETURN_TO_LAUNCH); - m_ui->comboBox_action->addItem(tr("Land"),MAV_CMD_NAV_LAND); + m_ui->comboBox_action->addItem(tr("NAV: Waypoint"),MAV_CMD_NAV_WAYPOINT); + m_ui->comboBox_action->addItem(tr("NAV: TakeOff"),MAV_CMD_NAV_TAKEOFF); + m_ui->comboBox_action->addItem(tr("NAV: Loiter Unlim."),MAV_CMD_NAV_LOITER_UNLIM); + m_ui->comboBox_action->addItem(tr("NAV: Loiter Time"),MAV_CMD_NAV_LOITER_TIME); + m_ui->comboBox_action->addItem(tr("NAV: Loiter Turns"),MAV_CMD_NAV_LOITER_TURNS); + m_ui->comboBox_action->addItem(tr("NAV: Ret. to Launch"),MAV_CMD_NAV_RETURN_TO_LAUNCH); + m_ui->comboBox_action->addItem(tr("NAV: Land"),MAV_CMD_NAV_LAND); + m_ui->comboBox_action->addItem(tr("NAV: Target"),MAV_CMD_NAV_TARGET); + m_ui->comboBox_action->addItem(tr("IF: Delay over"),MAV_CMD_CONDITION_DELAY); + m_ui->comboBox_action->addItem(tr("IF: Yaw angle is"),MAV_CMD_CONDITION_YAW); + m_ui->comboBox_action->addItem(tr("DO: Jump to Index"),MAV_CMD_DO_JUMP); m_ui->comboBox_action->addItem(tr("Other"), MAV_CMD_ENUM_END); - // m_ui->comboBox_action->addItem(tr("Delay"), MAV_ACTION_DELAY_BEFORE_COMMAND); - // m_ui->comboBox_action->addItem(tr("Ascend/Descent"), MAV_ACTION_ASCEND_AT_RATE); - // m_ui->comboBox_action->addItem(tr("Change Mode"), MAV_ACTION_CHANGE_MODE); - // m_ui->comboBox_action->addItem(tr("Relay ON"), MAV_ACTION_RELAY_ON); - // m_ui->comboBox_action->addItem(tr("Relay OFF"), MAV_ACTION_RELAY_OFF); // add frames m_ui->comboBox_frame->addItem("Global",MAV_FRAME_GLOBAL); @@ -204,6 +203,17 @@ void WaypointView::updateActionView(int action) m_ui->orbitSpinBox->show(); m_ui->holdTimeSpinBox->show(); break; + case MAV_CMD_NAV_TARGET: + m_ui->orbitSpinBox->hide(); + m_ui->takeOffAngleSpinBox->hide(); + m_ui->turnsSpinBox->hide(); + m_ui->holdTimeSpinBox->show(); + m_ui->customActionWidget->hide(); + + m_ui->autoContinue->show(); + m_ui->acceptanceSpinBox->hide(); + m_ui->yawSpinBox->hide(); + break; default: break; } diff --git a/src/ui/designer/QGCParamSlider.ui b/src/ui/designer/QGCParamSlider.ui index 7f195cb5d..b2daaee69 100644 --- a/src/ui/designer/QGCParamSlider.ui +++ b/src/ui/designer/QGCParamSlider.ui @@ -7,14 +7,14 @@ 0 0 499 - 173 + 175 Form - + Informal Name.. @@ -69,24 +69,69 @@ - + - TextLabel + Please click on refresh to update list.. - + + + Select component + + + Select component + + - - + + + + Select parameter + + + Select parameter + + + + Click on refresh.. + + + + + + + + Transmit the current slider value to the system + + + Transmit the current slider value to the system + - Done + + + + + :/images/devices/network-wireless.svg:/images/devices/network-wireless.svg + + + + + + + Read the current parameter value on the system + + + Read the current parameter value on the system + + + R - + true @@ -96,17 +141,17 @@ - - - - - Select Parameter.. - - + + + + Done + - + + + diff --git a/src/ui/designer/QGCToolWidget.cc b/src/ui/designer/QGCToolWidget.cc index f25445f41..6246648fa 100644 --- a/src/ui/designer/QGCToolWidget.cc +++ b/src/ui/designer/QGCToolWidget.cc @@ -175,7 +175,7 @@ void QGCToolWidget::addUAS(UASInterface* uas) void QGCToolWidget::contextMenuEvent (QContextMenuEvent* event) { QMenu menu(this); - //menu.addAction(addParamAction); + menu.addAction(addParamAction); menu.addAction(addButtonAction); menu.addAction(setTitleAction); menu.addAction(deleteAction); @@ -188,7 +188,7 @@ void QGCToolWidget::createActions() addParamAction->setStatusTip(tr("Add a parameter setting slider widget to the tool")); connect(addParamAction, SIGNAL(triggered()), this, SLOT(addParam())); - addButtonAction = new QAction(tr("New MAV &Action Button"), this); + addButtonAction = new QAction(tr("New MAV &Command Button"), this); addButtonAction->setStatusTip(tr("Add a new action button to the tool")); connect(addButtonAction, SIGNAL(triggered()), this, SLOT(addAction())); @@ -199,6 +199,14 @@ void QGCToolWidget::createActions() deleteAction = new QAction(tr("Delete this widget"), this); deleteAction->setStatusTip(tr("Delete this widget permanently")); connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteWidget())); + + exportAction = new QAction(tr("Export this widget"), this); + exportAction->setStatusTip(tr("Export this widget to be reused by others")); + connect(exportAction, SIGNAL(triggered()), this, SLOT(exportWidget())); + + importAction = new QAction(tr("Import widget"), this); + importAction->setStatusTip(tr("Import this widget from a file (current content will be removed)")); + connect(exportAction, SIGNAL(triggered()), this, SLOT(importWidget())); } QMap* QGCToolWidget::instances() @@ -249,6 +257,16 @@ void QGCToolWidget::addToolWidget(QGCToolWidgetItem* widget) toolLayout->addWidget(widget); } +void QGCToolWidget::exportWidget() +{ + +} + +void QGCToolWidget::importWidget(const QString& fileName) +{ + +} + const QString QGCToolWidget::getTitle() { QDockWidget* parent = dynamic_cast(this->parentWidget()); diff --git a/src/ui/designer/QGCToolWidget.h b/src/ui/designer/QGCToolWidget.h index a2a556f89..3a14b3ae0 100644 --- a/src/ui/designer/QGCToolWidget.h +++ b/src/ui/designer/QGCToolWidget.h @@ -32,6 +32,10 @@ public slots: void addUAS(UASInterface* uas); /** @brief Delete this widget */ void deleteWidget(); + /** @brief Export this widget to a file */ + void exportWidget(); + /** @brief Import settings for this widget from a file */ + void importWidget(const QString& fileName); /** @brief Store all widgets of this type to QSettings */ static void storeWidgetsToSettings(); @@ -43,6 +47,8 @@ protected: QAction* addButtonAction; QAction* setTitleAction; QAction* deleteAction; + QAction* exportAction; + QAction* importAction; QVBoxLayout* toolLayout; UAS* mav; QAction* mainMenuAction; diff --git a/src/ui/mission/QGCMissionConditionWidget.cc b/src/ui/mission/QGCMissionConditionWidget.cc new file mode 100644 index 000000000..f0c9f25e0 --- /dev/null +++ b/src/ui/mission/QGCMissionConditionWidget.cc @@ -0,0 +1,14 @@ +#include "QGCMissionConditionWidget.h" +#include "ui_QGCMissionConditionWidget.h" + +QGCMissionConditionWidget::QGCMissionConditionWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::QGCMissionConditionWidget) +{ + ui->setupUi(this); +} + +QGCMissionConditionWidget::~QGCMissionConditionWidget() +{ + delete ui; +} diff --git a/src/ui/mission/QGCMissionConditionWidget.h b/src/ui/mission/QGCMissionConditionWidget.h new file mode 100644 index 000000000..2d94cd920 --- /dev/null +++ b/src/ui/mission/QGCMissionConditionWidget.h @@ -0,0 +1,22 @@ +#ifndef QGCMISSIONCONDITIONWIDGET_H +#define QGCMISSIONCONDITIONWIDGET_H + +#include + +namespace Ui { + class QGCMissionConditionWidget; +} + +class QGCMissionConditionWidget : public QWidget +{ + Q_OBJECT + +public: + explicit QGCMissionConditionWidget(QWidget *parent = 0); + ~QGCMissionConditionWidget(); + +private: + Ui::QGCMissionConditionWidget *ui; +}; + +#endif // QGCMISSIONCONDITIONWIDGET_H diff --git a/src/ui/mission/QGCMissionConditionWidget.ui b/src/ui/mission/QGCMissionConditionWidget.ui new file mode 100644 index 000000000..e02caba49 --- /dev/null +++ b/src/ui/mission/QGCMissionConditionWidget.ui @@ -0,0 +1,145 @@ + + + QGCMissionConditionWidget + + + + 0 + 0 + 1260 + 31 + + + + Form + + + + 4 + + + 0 + + + + + delay: + + + s + + + 50000.000000000000000 + + + 5.000000000000000 + + + + + + + rate: + + + m/s + + + 200.000000000000000 + + + 0.500000000000000 + + + + + + + finish altitude: + + + m + + + -100.000000000000000 + + + 1000000.000000000000000 + + + + + + + distance to next wp: + + + m/s + + + 50000.000000000000000 + + + + + + + heading: + + + ° + + + + + + + turn rate: + + + °/s + + + 1000.000000000000000 + + + 15.000000000000000 + + + + + + + 1 + + + + left/counter-clockwise + + + + + right/clockwise + + + + + + + + + compass direction + + + + + offset from current heading + + + + + + + + + diff --git a/src/ui/mission/QGCMissionDoWidget.cc b/src/ui/mission/QGCMissionDoWidget.cc new file mode 100644 index 000000000..a30910935 --- /dev/null +++ b/src/ui/mission/QGCMissionDoWidget.cc @@ -0,0 +1,14 @@ +#include "QGCMissionDoWidget.h" +#include "ui_QGCMissionDoWidget.h" + +QGCMissionDoWidget::QGCMissionDoWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::QGCMissionDoWidget) +{ + ui->setupUi(this); +} + +QGCMissionDoWidget::~QGCMissionDoWidget() +{ + delete ui; +} diff --git a/src/ui/mission/QGCMissionDoWidget.h b/src/ui/mission/QGCMissionDoWidget.h new file mode 100644 index 000000000..a46aebc26 --- /dev/null +++ b/src/ui/mission/QGCMissionDoWidget.h @@ -0,0 +1,22 @@ +#ifndef QGCMISSIONDOWIDGET_H +#define QGCMISSIONDOWIDGET_H + +#include + +namespace Ui { + class QGCMissionDoWidget; +} + +class QGCMissionDoWidget : public QWidget +{ + Q_OBJECT + +public: + explicit QGCMissionDoWidget(QWidget *parent = 0); + ~QGCMissionDoWidget(); + +private: + Ui::QGCMissionDoWidget *ui; +}; + +#endif // QGCMISSIONDOWIDGET_H diff --git a/src/ui/mission/QGCMissionDoWidget.ui b/src/ui/mission/QGCMissionDoWidget.ui new file mode 100644 index 000000000..73363b1e2 --- /dev/null +++ b/src/ui/mission/QGCMissionDoWidget.ui @@ -0,0 +1,67 @@ + + + QGCMissionDoWidget + + + + 0 + 0 + 632 + 40 + + + + Form + + + + + 170 + 10 + 201 + 25 + + + + + + + list index to jump to: + + + 5000 + + + + + + 380 + 10 + 121 + 25 + + + + times + + + repeat + + + 1000 + + + + + + 20 + 10 + 111 + 26 + + + + + + + -- 2.22.0