mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-12-01 09:24:10 +01:00
Merge remote-tracking branch 'origin/dmytro/OP-969' into next
This commit is contained in:
commit
2cc7064552
@ -109,6 +109,7 @@ FORMS += \
|
||||
cc_hw_settings.ui \
|
||||
stabilization.ui \
|
||||
input.ui \
|
||||
input_wizard.ui \
|
||||
output.ui \
|
||||
ccattitude.ui \
|
||||
defaultattitude.ui \
|
||||
|
@ -80,6 +80,9 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) :
|
||||
ui = new Ui_InputWidget();
|
||||
ui->setupUi(this);
|
||||
|
||||
wizardUi = new Ui_InputWizardWidget();
|
||||
wizardUi->setupUi(ui->wizard);
|
||||
|
||||
addApplySaveButtons(ui->saveRCInputToRAM, ui->saveRCInputToSD);
|
||||
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
@ -154,9 +157,9 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) :
|
||||
connect(ui->stackedWidget, SIGNAL(currentChanged(int)), this, SLOT(disableWizardButton(int)));
|
||||
connect(ui->runCalibration, SIGNAL(toggled(bool)), this, SLOT(simpleCalibration(bool)));
|
||||
|
||||
connect(ui->wzNext, SIGNAL(clicked()), this, SLOT(wzNext()));
|
||||
connect(ui->wzCancel, SIGNAL(clicked()), this, SLOT(wzCancel()));
|
||||
connect(ui->wzBack, SIGNAL(clicked()), this, SLOT(wzBack()));
|
||||
connect(wizardUi->wzNext, SIGNAL(clicked()), this, SLOT(wzNext()));
|
||||
connect(wizardUi->wzCancel, SIGNAL(clicked()), this, SLOT(wzCancel()));
|
||||
connect(wizardUi->wzBack, SIGNAL(clicked()), this, SLOT(wzBack()));
|
||||
|
||||
ui->stackedWidget->setCurrentIndex(0);
|
||||
addWidgetBinding("FlightModeSettings", "FlightModePosition", ui->fmsModePos1, 0, 1, true);
|
||||
@ -207,11 +210,11 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) :
|
||||
// Connect the help button
|
||||
connect(ui->inputHelp, SIGNAL(clicked()), this, SLOT(openHelp()));
|
||||
|
||||
ui->graphicsView->setScene(new QGraphicsScene(this));
|
||||
ui->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
|
||||
wizardUi->graphicsView->setScene(new QGraphicsScene(this));
|
||||
wizardUi->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
|
||||
m_renderer = new QSvgRenderer();
|
||||
QGraphicsScene *l_scene = ui->graphicsView->scene();
|
||||
ui->graphicsView->setBackgroundBrush(QBrush(Utils::StyleHelper::baseColor()));
|
||||
QGraphicsScene *l_scene = wizardUi->graphicsView->scene();
|
||||
wizardUi->graphicsView->setBackgroundBrush(QBrush(Utils::StyleHelper::baseColor()));
|
||||
if (QFile::exists(":/configgadget/images/TX2.svg") && m_renderer->load(QString(":/configgadget/images/TX2.svg")) && m_renderer->isValid()) {
|
||||
l_scene->clear(); // Deletes all items contained in the scene as well.
|
||||
|
||||
@ -323,7 +326,7 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) :
|
||||
m_txAccess2Orig.translate(orig.x(), orig.y());
|
||||
m_txAccess2->setTransform(m_txAccess2Orig, true);
|
||||
}
|
||||
ui->graphicsView->fitInView(m_txMainBody, Qt::KeepAspectRatio);
|
||||
wizardUi->graphicsView->fitInView(m_txMainBody, Qt::KeepAspectRatio);
|
||||
animate = new QTimer(this);
|
||||
connect(animate, SIGNAL(timeout()), this, SLOT(moveTxControls()));
|
||||
|
||||
@ -377,7 +380,7 @@ void ConfigInputWidget::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
QWidget::resizeEvent(event);
|
||||
|
||||
ui->graphicsView->fitInView(m_txBackground, Qt::KeepAspectRatio);
|
||||
wizardUi->graphicsView->fitInView(m_txBackground, Qt::KeepAspectRatio);
|
||||
}
|
||||
|
||||
void ConfigInputWidget::openHelp()
|
||||
@ -426,7 +429,7 @@ void ConfigInputWidget::goToWizard()
|
||||
|
||||
// start the wizard
|
||||
wizardSetUpStep(wizardWelcome);
|
||||
ui->graphicsView->fitInView(m_txBackground, Qt::KeepAspectRatio);
|
||||
wizardUi->graphicsView->fitInView(m_txBackground, Qt::KeepAspectRatio);
|
||||
}
|
||||
|
||||
void ConfigInputWidget::disableWizardButton(int value)
|
||||
@ -600,8 +603,7 @@ void ConfigInputWidget::wzBack()
|
||||
|
||||
void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
||||
{
|
||||
ui->wzText2->clear();
|
||||
ui->wzNext->setText(tr("Next"));
|
||||
wizardUi->wzNext->setText(tr("Next"));
|
||||
|
||||
switch (step) {
|
||||
case wizardWelcome:
|
||||
@ -611,43 +613,36 @@ void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
||||
}
|
||||
}
|
||||
extraWidgets.clear();
|
||||
ui->graphicsView->setVisible(false);
|
||||
wizardUi->graphicsView->setVisible(false);
|
||||
setTxMovement(nothing);
|
||||
ui->wzText->setText(tr("Welcome to the inputs configuration wizard.\n\n"
|
||||
"Please follow the instructions on the screen and only move your controls when asked to.\n"
|
||||
"Make sure you already configured your hardware settings on the proper tab and restarted your board.\n\n"
|
||||
"You can press 'back' at any time to return to the previous screen or press 'Cancel' to quit the wizard.\n"));
|
||||
wizardUi->wzBack->setEnabled(false);
|
||||
wizardUi->pagesStack->setCurrentWidget(wizardUi->welcomePage);
|
||||
ui->stackedWidget->setCurrentIndex(1);
|
||||
ui->wzBack->setEnabled(false);
|
||||
break;
|
||||
case wizardChooseType:
|
||||
{
|
||||
ui->graphicsView->setVisible(true);
|
||||
ui->graphicsView->fitInView(m_txBackground, Qt::KeepAspectRatio);
|
||||
wizardUi->graphicsView->setVisible(true);
|
||||
wizardUi->graphicsView->fitInView(m_txBackground, Qt::KeepAspectRatio);
|
||||
setTxMovement(nothing);
|
||||
ui->wzText->setText(tr("Please choose your transmitter type:"));
|
||||
ui->wzBack->setEnabled(true);
|
||||
QRadioButton *typeAcro = new QRadioButton(tr("Acro: normal transmitter for fixed-wing or quad"), this);
|
||||
QRadioButton *typeHeli = new QRadioButton(tr("Helicopter: has collective pitch and throttle input"), this);
|
||||
wizardUi->wzBack->setEnabled(true);
|
||||
if (transmitterType == heli) {
|
||||
typeHeli->setChecked(true);
|
||||
wizardUi->typeHeli->setChecked(true);
|
||||
} else {
|
||||
typeAcro->setChecked(true);
|
||||
wizardUi->typeAcro->setChecked(true);
|
||||
}
|
||||
ui->wzText2->setText(tr("If selecting the Helicopter option, please engage throttle hold now."));
|
||||
|
||||
extraWidgets.clear();
|
||||
extraWidgets.append(typeAcro);
|
||||
extraWidgets.append(typeHeli);
|
||||
ui->radioButtonsLayout->layout()->addWidget(typeAcro);
|
||||
ui->radioButtonsLayout->layout()->addWidget(typeHeli);
|
||||
wizardUi->pagesStack->setCurrentWidget(wizardUi->chooseTypePage);
|
||||
}
|
||||
break;
|
||||
case wizardChooseMode:
|
||||
{
|
||||
ui->wzBack->setEnabled(true);
|
||||
extraWidgets.clear();
|
||||
ui->wzText->setText(tr("Please choose your transmitter mode:"));
|
||||
wizardUi->wzBack->setEnabled(true);
|
||||
QRadioButton* modeButtons[] = {
|
||||
wizardUi->mode1Button,
|
||||
wizardUi->mode2Button,
|
||||
wizardUi->mode3Button,
|
||||
wizardUi->mode4Button
|
||||
};
|
||||
|
||||
for (int i = 0; i <= mode4; ++i) {
|
||||
QString label;
|
||||
txMode mode = static_cast<txMode>(i);
|
||||
@ -659,6 +654,7 @@ void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
||||
case mode4: label = tr("Mode 4: Throttle/Collective and Left/Right Cyclic on the left, Fore/Aft Cyclic and Yaw on the right"); break;
|
||||
default: Q_ASSERT(0); break;
|
||||
}
|
||||
wizardUi->typePageFooter->setText(" ");
|
||||
} else {
|
||||
switch (mode) {
|
||||
case mode1: label = tr("Mode 1: Elevator and Rudder on the left, Throttle and Ailerons on the right"); break;
|
||||
@ -667,15 +663,14 @@ void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
||||
case mode4: label = tr("Mode 4: Throttle and Ailerons on the left, Elevator and Rudder on the right"); break;
|
||||
default: Q_ASSERT(0); break;
|
||||
}
|
||||
ui->wzText2->setText(tr("For a Quad: Elevator is Pitch, Ailerons are Roll, and Rudder is Yaw."));
|
||||
wizardUi->typePageFooter->setText(tr("For a Quad: Elevator is Pitch, Ailerons are Roll, and Rudder is Yaw."));
|
||||
}
|
||||
QRadioButton *modeButton = new QRadioButton(label, this);
|
||||
modeButtons[i]->setText(label);
|
||||
if (transmitterMode == mode) {
|
||||
modeButton->setChecked(true);
|
||||
modeButtons[i]->setChecked(true);
|
||||
}
|
||||
extraWidgets.append(modeButton);
|
||||
ui->radioButtonsLayout->layout()->addWidget(modeButton);
|
||||
}
|
||||
wizardUi->pagesStack->setCurrentWidget(wizardUi->chooseModePage);
|
||||
}
|
||||
break;
|
||||
case wizardIdentifySticks:
|
||||
@ -684,17 +679,16 @@ void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
||||
nextChannel();
|
||||
manualSettingsData = manualSettingsObj->getData();
|
||||
connect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(identifyControls()));
|
||||
ui->wzNext->setEnabled(false);
|
||||
wizardUi->wzNext->setEnabled(false);
|
||||
wizardUi->pagesStack->setCurrentWidget(wizardUi->identifySticksPage);
|
||||
break;
|
||||
case wizardIdentifyCenter:
|
||||
setTxMovement(centerAll);
|
||||
ui->wzText->setText(QString(tr("Please center all controls and trims and press Next when ready.\n\n"
|
||||
"If your FlightMode switch has only two positions, leave it in either position.")));
|
||||
wizardUi->pagesStack->setCurrentWidget(wizardUi->identifyCenterPage);
|
||||
break;
|
||||
case wizardIdentifyLimits:
|
||||
{
|
||||
setTxMovement(nothing);
|
||||
ui->wzText->setText(QString(tr("Please move all controls to their maximum extents on both directions.\n\nPress Next when ready.")));
|
||||
manualSettingsData = manualSettingsObj->getData();
|
||||
for (uint i = 0; i < ManualControlSettings::CHANNELMAX_NUMELEM; ++i) {
|
||||
// Preserve the inverted status
|
||||
@ -711,6 +705,8 @@ void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||
connect(flightStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||
connect(accessoryDesiredObj0, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||
|
||||
wizardUi->pagesStack->setCurrentWidget(wizardUi->identifyLimitsPage);
|
||||
}
|
||||
break;
|
||||
case wizardIdentifyInverted:
|
||||
@ -724,22 +720,20 @@ void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
||||
QCheckBox *cb = new QCheckBox(name, this);
|
||||
// Make sure checked status matches current one
|
||||
cb->setChecked(manualSettingsData.ChannelMax[index] < manualSettingsData.ChannelMin[index]);
|
||||
dynamic_cast<QGridLayout *>(ui->checkBoxesLayout->layout())->addWidget(cb, extraWidgets.size() / 4, extraWidgets.size() % 4);
|
||||
wizardUi->checkBoxesLayout->addWidget(cb, extraWidgets.size() / 4, extraWidgets.size() % 4);
|
||||
extraWidgets.append(cb);
|
||||
connect(cb, SIGNAL(toggled(bool)), this, SLOT(invertControls()));
|
||||
}
|
||||
}
|
||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||
ui->wzText->setText(QString(tr("Please check the picture below and correct all the sticks which show an inverted movement. Press Next when ready.")));
|
||||
wizardUi->pagesStack->setCurrentWidget(wizardUi->identifyInvertedPage);
|
||||
break;
|
||||
case wizardFinish:
|
||||
dimOtherControls(false);
|
||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||
connect(flightStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||
connect(accessoryDesiredObj0, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||
ui->wzText->setText(QString(tr("You have completed this wizard, please check below if the picture mimics your sticks movement.\n\n"
|
||||
"IMPORTANT: These new settings have not been saved to the board yet. After pressing Next you will go to the Arming Settings "
|
||||
"tab where you can set your desired arming sequence and save the configuration.")));
|
||||
wizardUi->pagesStack->setCurrentWidget(wizardUi->finishPage);
|
||||
break;
|
||||
default:
|
||||
Q_ASSERT(0);
|
||||
@ -749,36 +743,35 @@ void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
||||
|
||||
void ConfigInputWidget::wizardTearDownStep(enum wizardSteps step)
|
||||
{
|
||||
QRadioButton *mode, *type;
|
||||
|
||||
Q_ASSERT(step == wizardStep);
|
||||
switch (step) {
|
||||
case wizardWelcome:
|
||||
break;
|
||||
case wizardChooseType:
|
||||
type = qobject_cast<QRadioButton *>(extraWidgets.at(0));
|
||||
if (type->isChecked()) {
|
||||
if (wizardUi->typeAcro->isChecked()) {
|
||||
transmitterType = acro;
|
||||
} else {
|
||||
transmitterType = heli;
|
||||
}
|
||||
delete extraWidgets.at(0);
|
||||
delete extraWidgets.at(1);
|
||||
extraWidgets.clear();
|
||||
break;
|
||||
case wizardChooseMode:
|
||||
for (int i = mode1; i <= mode4; ++i) {
|
||||
mode = qobject_cast<QRadioButton *>(extraWidgets.first());
|
||||
if (mode->isChecked()) {
|
||||
transmitterMode = static_cast<txMode>(i);
|
||||
{
|
||||
QRadioButton* modeButtons[] = {
|
||||
wizardUi->mode1Button,
|
||||
wizardUi->mode2Button,
|
||||
wizardUi->mode3Button,
|
||||
wizardUi->mode4Button
|
||||
};
|
||||
for (int i = mode1; i <= mode4; ++i) {
|
||||
if (modeButtons[i]->isChecked()) {
|
||||
transmitterMode = static_cast<txMode>(i);
|
||||
}
|
||||
}
|
||||
delete mode;
|
||||
extraWidgets.removeFirst();
|
||||
}
|
||||
break;
|
||||
case wizardIdentifySticks:
|
||||
disconnect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(identifyControls()));
|
||||
ui->wzNext->setEnabled(true);
|
||||
wizardUi->wzNext->setEnabled(true);
|
||||
setTxMovement(nothing);
|
||||
break;
|
||||
case wizardIdentifyCenter:
|
||||
@ -861,22 +854,22 @@ void ConfigInputWidget::restoreMdata()
|
||||
void ConfigInputWidget::setChannel(int newChan)
|
||||
{
|
||||
if (newChan == ManualControlSettings::CHANNELGROUPS_COLLECTIVE) {
|
||||
ui->wzText->setText(QString(tr("Please enable throttle hold mode.\n\nMove the Collective Pitch stick.")));
|
||||
wizardUi->identifyStickInstructions->setText(QString(tr("Please enable throttle hold mode.\n\nMove the Collective Pitch stick.")));
|
||||
} else if (newChan == ManualControlSettings::CHANNELGROUPS_FLIGHTMODE) {
|
||||
ui->wzText->setText(QString(tr("Please toggle the Flight Mode switch.\n\nFor switches you may have to repeat this rapidly.")));
|
||||
wizardUi->identifyStickInstructions->setText(QString(tr("Please toggle the Flight Mode switch.\n\nFor switches you may have to repeat this rapidly.")));
|
||||
} else if ((transmitterType == heli) && (newChan == ManualControlSettings::CHANNELGROUPS_THROTTLE)) {
|
||||
ui->wzText->setText(QString(tr("Please disable throttle hold mode.\n\nMove the Throttle stick.")));
|
||||
wizardUi->identifyStickInstructions->setText(QString(tr("Please disable throttle hold mode.\n\nMove the Throttle stick.")));
|
||||
} else {
|
||||
ui->wzText->setText(QString(tr("Please move each control one at a time according to the instructions and picture below.\n\n"
|
||||
wizardUi->identifyStickInstructions->setText(QString(tr("Please move each control one at a time according to the instructions and picture below.\n\n"
|
||||
"Move the %1 stick.")).arg(manualSettingsObj->getField("ChannelGroups")->getElementNames().at(newChan)));
|
||||
}
|
||||
|
||||
if (manualSettingsObj->getField("ChannelGroups")->getElementNames().at(newChan).contains("Accessory")) {
|
||||
ui->wzNext->setEnabled(true);
|
||||
ui->wzNext->setText(tr("Next / Skip"));
|
||||
ui->wzText->setText(ui->wzText->text() + tr(" Alternatively, click Next to skip this channel."));
|
||||
wizardUi->wzNext->setEnabled(true);
|
||||
wizardUi->wzNext->setText(tr("Next / Skip"));
|
||||
wizardUi->identifyStickInstructions->setText(wizardUi->identifyStickInstructions->text() + tr(" Alternatively, click Next to skip this channel."));
|
||||
} else {
|
||||
ui->wzNext->setEnabled(false);
|
||||
wizardUi->wzNext->setEnabled(false);
|
||||
}
|
||||
|
||||
setMoveFromCommand(newChan);
|
||||
|
@ -28,6 +28,7 @@
|
||||
#define CONFIGINPUTWIDGET_H
|
||||
|
||||
#include "ui_input.h"
|
||||
#include "ui_input_wizard.h"
|
||||
#include "../uavobjectwidgetutils/configtaskwidget.h"
|
||||
#include "extensionsystem/pluginmanager.h"
|
||||
#include "uavobjectmanager.h"
|
||||
@ -76,6 +77,8 @@ private:
|
||||
int movePos;
|
||||
void setTxMovement(txMovements movement);
|
||||
Ui_InputWidget *ui;
|
||||
Ui_InputWizardWidget *wizardUi;
|
||||
|
||||
wizardSteps wizardStep;
|
||||
QList<QPointer<QWidget> > extraWidgets;
|
||||
txMode transmitterMode;
|
||||
|
@ -275,80 +275,6 @@
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="wizard">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<property name="leftMargin">
|
||||
<number>12</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>12</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>12</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>12</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="wzText">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="radioButtonsLayout"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="checkBoxesLayout"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="wzText2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGraphicsView" name="graphicsView"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QPushButton" name="wzBack">
|
||||
<property name="text">
|
||||
<string>Back</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="wzNext">
|
||||
<property name="text">
|
||||
<string>Next</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="wzCancel">
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
@ -2551,10 +2477,6 @@ Applies and Saves all settings to SD</string>
|
||||
<tabstops>
|
||||
<tabstop>tabWidget</tabstop>
|
||||
<tabstop>deadband</tabstop>
|
||||
<tabstop>graphicsView</tabstop>
|
||||
<tabstop>wzBack</tabstop>
|
||||
<tabstop>wzNext</tabstop>
|
||||
<tabstop>wzCancel</tabstop>
|
||||
<tabstop>armControl</tabstop>
|
||||
<tabstop>armTimeout</tabstop>
|
||||
<tabstop>inputHelp</tabstop>
|
||||
|
271
ground/openpilotgcs/src/plugins/config/input_wizard.ui
Normal file
271
ground/openpilotgcs/src/plugins/config/input_wizard.ui
Normal file
@ -0,0 +1,271 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>InputWizardWidget</class>
|
||||
<widget class="QWidget" name="InputWizardWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>644</width>
|
||||
<height>529</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QStackedWidget" name="pagesStack">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="welcomePage">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="welcomeText">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Welcome to the inputs configuration wizard.
|
||||
|
||||
Please follow the instructions on the screen and only move your controls when asked to.
|
||||
Make sure you already configured your hardware settings on the proper tab and restarted your board.
|
||||
|
||||
You can press 'back' at any time to return to the previous screen or press 'Cancel' to quit the wizard.
|
||||
</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::AutoText</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="chooseTypePage">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="typePageHeader">
|
||||
<property name="text">
|
||||
<string>Please choose your transmitter type:</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="typeAcro">
|
||||
<property name="text">
|
||||
<string>Acro: normal transmitter for fixed-wing or quad</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="typeHeli">
|
||||
<property name="text">
|
||||
<string>Helicopter: has collective pitch and throttle input</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="typePageFooter">
|
||||
<property name="text">
|
||||
<string>If selecting the Helicopter option, please engage throttle hold now.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="chooseModePage">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="modePageHeader">
|
||||
<property name="text">
|
||||
<string>Please choose your transmitter mode:</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="mode1Button">
|
||||
<property name="text">
|
||||
<string>Mode 1</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="mode2Button">
|
||||
<property name="text">
|
||||
<string>Mode 2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="mode3Button">
|
||||
<property name="text">
|
||||
<string>Mode 3</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="mode4Button">
|
||||
<property name="text">
|
||||
<string>Mode 4</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="modePageFooter">
|
||||
<property name="text">
|
||||
<string>For a Quad: Elevator is Pitch, Ailerons are Roll, and Rudder is Yaw.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="identifySticksPage">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="identifyStickInstructions">
|
||||
<property name="text">
|
||||
<string>Identify sticks instructions</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="identifyCenterPage">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="identifyCenterInstructions">
|
||||
<property name="text">
|
||||
<string>Please center all controls and trims and press Next when ready.
|
||||
|
||||
If your FlightMode switch has only two positions, leave it in either position.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="identifyLimitsPage">
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="identifyLimitsInstructions">
|
||||
<property name="text">
|
||||
<string>Please move all controls to their maximum extents on both directions.
|
||||
|
||||
Press Next when ready.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="identifyInvertedPage">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="checkBoxesLayout"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="identifyInvertedInstructions">
|
||||
<property name="text">
|
||||
<string>Please check the picture below and correct all the sticks which show an inverted movement. Press Next when ready.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="finishPage">
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>You have completed this wizard, please check below if the picture mimics your sticks movement.
|
||||
|
||||
IMPORTANT: These new settings have not been saved to the board yet. After pressing Next you will go to the Arming Settings tab where you can set your desired arming sequence and save the configuration.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGraphicsView" name="graphicsView">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QPushButton" name="wzBack">
|
||||
<property name="text">
|
||||
<string>Back</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="wzNext">
|
||||
<property name="text">
|
||||
<string>Next</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="wzCancel">
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in New Issue
Block a user