/** ****************************************************************************** * * @file configgadgetwidget.cpp * @author E. Lafargue & The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. * @addtogroup GCSPlugins GCS Plugins * @{ * @addtogroup ConfigPlugin Config Plugin * @{ * @brief The Configuration Gadget used to update settings in the firmware *****************************************************************************/ /* * 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 "configahrswidget.h" #include "configgadgetwidget.h" #include "configairframewidget.h" #include "configccattitudewidget.h" #include "configinputwidget.h" #include "configoutputwidget.h" #include "configstabilizationwidget.h" #include "configtelemetrywidget.h" #include "defaultattitudewidget.h" #include "uavobjectutilmanager.h" #include #include #include #include #include #include ConfigGadgetWidget::ConfigGadgetWidget(QWidget *parent) : QWidget(parent) { setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); ftw = new FancyTabWidget(this, true); ftw->setIconSize(64); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(ftw); setLayout(layout); // ********************* QWidget *qwd; qwd = new ConfigAirframeWidget(this); ftw->insertTab(0, qwd, QIcon(":/configgadget/images/Airframe.png"), QString("Aircraft")); qwd = new ConfigInputWidget(this); ftw->insertTab(1, qwd, QIcon(":/configgadget/images/Transmitter.png"), QString("Input")); qwd = new ConfigOutputWidget(this); ftw->insertTab(2, qwd, QIcon(":/configgadget/images/Servo.png"), QString("Output")); qwd = new DefaultAttitudeWidget(this); ftw->insertTab(3, qwd, QIcon(":/configgadget/images/AHRS-v1.3.png"), QString("INS")); qwd = new ConfigStabilizationWidget(this); ftw->insertTab(4, qwd, QIcon(":/configgadget/images/gyroscope.svg"), QString("Stabilization")); qwd = new ConfigTelemetryWidget(this); ftw->insertTab(5, qwd, QIcon(":/configgadget/images/XBee.svg"), QString("Telemetry")); // qwd = new ConfigPipXtremeWidget(this); // ftw->insertTab(5, qwd, QIcon(":/configgadget/images/PipXtreme.png"), QString("PipXtreme")); // ********************* // Listen to autopilot connection events ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); TelemetryManager* telMngr = pm->getObject(); connect(telMngr, SIGNAL(connected()), this, SLOT(onAutopilotConnect())); // And check whether by any chance we are not already connected if (telMngr->isConnected()) onAutopilotConnect(); help = 0; } ConfigGadgetWidget::~ConfigGadgetWidget() { // Do nothing // TODO: properly delete all the tabs in ftw before exiting } void ConfigGadgetWidget::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); } void ConfigGadgetWidget::onAutopilotConnect() { // First of all, check what Board type we are talking to, and // if necessary, remove/add tabs in the config gadget: ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectUtilManager* utilMngr = pm->getObject(); if (utilMngr) { int board = utilMngr->getBoardModel(); qDebug() << "Board model: " << board; if ((board & 0xff00) == 1024) { // CopterControl family // Delete the INS panel, replace with CC Panel: ftw->setCurrentIndex(0); ftw->removeTab(3); QWidget *qwd = new ConfigCCAttitudeWidget(this); ftw->insertTab(3, qwd, QIcon(":/configgadget/images/AHRS-v1.3.png"), QString("Attitude")); } else if ((board & 0xff00) == 256 ) { // Mainboard family ftw->setCurrentIndex(0); ftw->removeTab(3); QWidget *qwd = new ConfigAHRSWidget(this); ftw->insertTab(3, qwd, QIcon(":/configgadget/images/AHRS-v1.3.png"), QString("INS")); } } emit autopilotConnected(); } void ConfigGadgetWidget::showHelp(const QString &helpName) { // Close any previous help windows still open if(help != 0) { help->close(); } // Make help windows with given filename and resize to config gadget width help = new QTextBrowser(this); help->setSource(QUrl::fromLocalFile( QString(Utils::PathUtils().InsertDataPath("%%DATAPATH%%help/")) + helpName + QString(".html") )); QSize size = help->sizeHint(); size.setWidth(this->width()); help->resize(size); // Now catch closing events, show the window and give it focus help->installEventFilter(this); help->show(); help->setFocus(); } bool ConfigGadgetWidget::eventFilter(QObject *obj, QEvent *event) { // If help is open and we get a close event, close the help window // Close events currently are any key press and the mouse leaving the help window //printf("event type: %d\n",event->type()); if(help != 0) { if (event->type() == QEvent::Leave || event->type() == QEvent::KeyPress) { help->close(); help=0; return true; } } // standard event processing return QObject::eventFilter(obj, event); }