diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/airspeedpage.cpp b/ground/openpilotgcs/src/plugins/setupwizard/pages/airspeedpage.cpp new file mode 100644 index 000000000..de8ab0bcd --- /dev/null +++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/airspeedpage.cpp @@ -0,0 +1,136 @@ +/** + ****************************************************************************** + * + * @file fixedwingpage.cpp + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. + * @addtogroup + * @{ + * @addtogroup FixedWingPage + * @{ + * @brief + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "airspeedpage.h" +#include "ui_airspeed.h" +#include "setupwizard.h" + +AirSpeedPage::AirSpeedPage(SetupWizard *wizard, QWidget *parent) : + AbstractWizardPage(wizard, parent), + ui(new Ui::AirSpeedPage) +{ + ui->setupUi(this); + QSvgRenderer *renderer = new QSvgRenderer(); + renderer->load(QString(":/configgadget/images/fixedwing-shapes.svg")); + m_airspeedPic = new QGraphicsSvgItem(); + m_airspeedPic->setSharedRenderer(renderer); + QGraphicsScene *scene = new QGraphicsScene(this); + scene->addItem(m_airspeedPic); + ui->typeGraphicsView->setScene(scene); + + setupAirSpeedPageTypesCombo(); + + // Default to Software Estimation + connect(ui->typeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(updateImageAndDescription())); + ui->typeCombo->setCurrentIndex(0); +} + +AirSpeedPage::~AirSpeedPage() +{ + delete ui; +} + +void AirSpeedPage::initializePage() +{ + updateAvailableTypes(); + updateImageAndDescription(); +} + +//TODO +bool AirSpeedPage::validatePage() +{ + SetupWizard::VEHICLE_SUB_TYPE type = (SetupWizard::VEHICLE_SUB_TYPE)ui->typeCombo->itemData(ui->typeCombo->currentIndex()).toInt(); + + getWizard()->setVehicleSubType(type); + return true; +} + +void AirSpeedPage::fitInView() +{ + if (m_airspeedPic) { + ui->typeGraphicsView->setSceneRect(m_airspeedPic->boundingRect()); + ui->typeGraphicsView->fitInView(m_airspeedPic, Qt::KeepAspectRatio); + } +} + +void AirSpeedPage::resizeEvent(QResizeEvent *event) +{ + Q_UNUSED(event); + fitInView(); +} + +void AirSpeedPage::showEvent(QShowEvent *event) +{ + Q_UNUSED(event); + fitInView(); +} + +//TODO +void AirSpeedPage::setupAirSpeedPageTypesCombo() +{ + ui->typeCombo->addItem(tr("Aileron Dual Servos"), SetupWizard::FIXED_WING_DUAL_AILERON); + m_descriptions << tr("This setup expects a traditional airframe using two independent aileron servos on their own channel (not connected by Y adapter) plus an elevator and a rudder. "); + + ui->typeCombo->addItem(tr("Aileron Single Servo"), SetupWizard::FIXED_WING_AILERON); + m_descriptions << tr("This setup expects a traditional airframe using a single alieron servo or two servos connected by a Y adapter plus an elevator and a rudder. "); + + ui->typeCombo->addItem(tr("Elevon"), SetupWizard::FIXED_WING_ELEVON); + m_descriptions << tr("This setup currently expects a flying-wing setup, an elevon plus rudder setup is not yet supported. Setup should include only two elevons, and should explicitly not include a rudder."); +} + +void AirSpeedPage::updateAvailableTypes() +{ +} + +//TODO +void AirSpeedPage::updateImageAndDescription() +{ + SetupWizard::VEHICLE_SUB_TYPE type = (SetupWizard::VEHICLE_SUB_TYPE)ui->typeCombo->itemData(ui->typeCombo->currentIndex()).toInt(); + QString elementId = ""; + QString description = m_descriptions.at(ui->typeCombo->currentIndex()); + + switch (type) { + case SetupWizard::FIXED_WING_DUAL_AILERON: + elementId = "aileron"; + break; + case SetupWizard::FIXED_WING_AILERON: + elementId = "aileron-single"; + break; + case SetupWizard::FIXED_WING_ELEVON: + elementId = "elevon"; + break; + default: + elementId = ""; + break; + } + m_airspeedPic->setElementId(elementId); + ui->typeGraphicsView->setSceneRect(m_airspeedPic->boundingRect()); + ui->typeGraphicsView->fitInView(m_airspeedPic, Qt::KeepAspectRatio); + + ui->typeDescription->setText(description); + +} diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/airspeedpage.h b/ground/openpilotgcs/src/plugins/setupwizard/pages/airspeedpage.h new file mode 100644 index 000000000..757d25661 --- /dev/null +++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/airspeedpage.h @@ -0,0 +1,68 @@ +/** + ****************************************************************************** + * + * @file fixedwingpage.h + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. + * @addtogroup + * @{ + * @addtogroup FixedWingPage + * @{ + * @brief + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef AIRSPEEDPAGE_H +#define AIRSPEEDPAGE_H + +#include +#include +#include + +#include "abstractwizardpage.h" + +namespace Ui { +class AirSpeedPage; +} + +class AirSpeedPage : public AbstractWizardPage { + Q_OBJECT + +public: + explicit AirSpeedPage(SetupWizard *wizard, QWidget *parent = 0); + ~AirSpeedPage(); + + void initializePage(); + bool validatePage(); + + void fitInView(); +protected: + void resizeEvent(QResizeEvent *event); + void showEvent(QShowEvent *event); + +private: + Ui::AirSpeedPage *ui; + void setupAirSpeedPageTypesCombo(); + QGraphicsSvgItem *m_fixedwingPic; + void updateAvailableTypes(); + QList m_descriptions; + +private slots: + void updateImageAndDescription(); + +}; + +#endif // AIRSPEEDPAGE_H diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/airspeedpage.ui b/ground/openpilotgcs/src/plugins/setupwizard/pages/airspeedpage.ui new file mode 100644 index 000000000..824124bf3 --- /dev/null +++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/airspeedpage.ui @@ -0,0 +1,164 @@ + + + FixedWingPage + + + + 0 + 0 + 600 + 400 + + + + WizardPage + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">OpenPilot Airspeed Sensor Configuration</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">This part of the wizard will set up the OpenPilot controller for use with an airspeed sensor also commonly called a Pitot tube. The OpenPilot Platform supports multiple types of hardware airspeed sensors as well as an advanced software based wind speed estimation algorthym which requires no additional hardware although this is slightly less accurate than using a dedicated hardware sensor. </span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Please select the type of airspeed sensor you wish to use below:</span></p></body></html> + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + 4 + + + + + + + 4 + + + + + + 125 + 36 + + + + + 10 + 50 + false + + + + Airspeed type: + + + + + + + + 125 + 20 + + + + + + + + + + + 0 + 0 + + + + Qt::ScrollBarAlwaysOn + + + Qt::ScrollBarAlwaysOff + + + Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + + 0 + 0 + + + + + 200 + 200 + + + + true + + + QFrame::NoFrame + + + 0 + + + 0 + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + false + + + + + + + + + +