2010-08-10 07:42:39 +02:00
|
|
|
/**
|
|
|
|
******************************************************************************
|
|
|
|
*
|
|
|
|
* @file scopegadgetoptionspage.cpp
|
|
|
|
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
|
|
|
* @addtogroup GCSPlugins GCS Plugins
|
|
|
|
* @{
|
|
|
|
* @addtogroup ScopePlugin Scope Gadget Plugin
|
|
|
|
* @{
|
|
|
|
* @brief The scope Gadget, graphically plots the states of UAVObjects
|
|
|
|
*****************************************************************************/
|
|
|
|
/*
|
|
|
|
* 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 "scopegadgetoptionspage.h"
|
|
|
|
|
|
|
|
#include "extensionsystem/pluginmanager.h"
|
2011-01-22 18:38:22 +01:00
|
|
|
#include "uavobjectmanager.h"
|
|
|
|
#include "uavdataobject.h"
|
2010-08-10 07:42:39 +02:00
|
|
|
|
|
|
|
|
2010-08-30 00:45:12 +02:00
|
|
|
#include <QtGui/qpalette.h>
|
|
|
|
|
2010-08-10 07:42:39 +02:00
|
|
|
|
|
|
|
ScopeGadgetOptionsPage::ScopeGadgetOptionsPage(ScopeGadgetConfiguration *config, QObject *parent) :
|
|
|
|
IOptionsPage(parent),
|
|
|
|
m_config(config)
|
|
|
|
{
|
|
|
|
//nothing to do here...
|
|
|
|
}
|
|
|
|
|
|
|
|
//creates options page widget (uses the UI file)
|
|
|
|
QWidget* ScopeGadgetOptionsPage::createPage(QWidget *parent)
|
|
|
|
{
|
2010-09-21 21:29:43 +02:00
|
|
|
Q_UNUSED(parent);
|
|
|
|
|
2010-08-10 07:42:39 +02:00
|
|
|
options_page = new Ui::ScopeGadgetOptionsPage();
|
|
|
|
//main widget
|
|
|
|
QWidget *optionsPageWidget = new QWidget;
|
|
|
|
//main layout
|
|
|
|
options_page->setupUi(optionsPageWidget);
|
|
|
|
|
|
|
|
options_page->cmbPlotType->addItem("Sequencial Plot","");
|
|
|
|
options_page->cmbPlotType->addItem("Chronological Plot","");
|
|
|
|
|
|
|
|
// Fills the combo boxes for the UAVObjects
|
|
|
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
|
|
|
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
|
|
|
QList< QList<UAVDataObject*> > objList = objManager->getDataObjects();
|
|
|
|
foreach (QList<UAVDataObject*> list, objList) {
|
|
|
|
foreach (UAVDataObject* obj, list) {
|
|
|
|
options_page->cmbUAVObjects->addItem(obj->getName());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//Connect signals to slots cmbUAVObjects.currentIndexChanged
|
|
|
|
connect(options_page->cmbUAVObjects, SIGNAL(currentIndexChanged(QString)), this, SLOT(on_cmbUAVObjects_currentIndexChanged(QString)));
|
|
|
|
|
|
|
|
if(options_page->cmbUAVObjects->currentIndex() >= 0)
|
|
|
|
on_cmbUAVObjects_currentIndexChanged(options_page->cmbUAVObjects->currentText());
|
|
|
|
|
|
|
|
options_page->cmbScale->addItem("E-9", -9);
|
|
|
|
options_page->cmbScale->addItem("E-6", -6);
|
|
|
|
options_page->cmbScale->addItem("E-5",-5);
|
|
|
|
options_page->cmbScale->addItem("E-4",-4);
|
|
|
|
options_page->cmbScale->addItem("E-3",-3);
|
|
|
|
options_page->cmbScale->addItem("E-2",-2);
|
|
|
|
options_page->cmbScale->addItem("E-1",-1);
|
|
|
|
options_page->cmbScale->addItem("E0",0);
|
|
|
|
options_page->cmbScale->addItem("E1",1);
|
|
|
|
options_page->cmbScale->addItem("E2",2);
|
|
|
|
options_page->cmbScale->addItem("E3",3);
|
|
|
|
options_page->cmbScale->addItem("E4",4);
|
|
|
|
options_page->cmbScale->addItem("E5",5);
|
|
|
|
options_page->cmbScale->addItem("E6",6);
|
|
|
|
options_page->cmbScale->addItem("E9",9);
|
|
|
|
options_page->cmbScale->addItem("E12",12);
|
|
|
|
options_page->cmbScale->setCurrentIndex(7);
|
|
|
|
|
|
|
|
//Set widget values from settings
|
|
|
|
options_page->cmbPlotType->setCurrentIndex(m_config->plotType());
|
|
|
|
options_page->spnDataSize->setValue(m_config->dataSize());
|
|
|
|
options_page->spnRefreshInterval->setValue(m_config->refreshInterval());
|
|
|
|
|
|
|
|
//add the configured curves
|
|
|
|
foreach (PlotCurveConfiguration* plotData, m_config->plotCurveConfigs()) {
|
|
|
|
|
|
|
|
QString uavObject = plotData->uavObject;
|
|
|
|
QString uavField = plotData->uavField;
|
|
|
|
int scale = plotData->yScalePower;
|
|
|
|
QVariant varColor = plotData->color;
|
|
|
|
|
|
|
|
addPlotCurveConfig(uavObject,uavField,scale,varColor);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(m_config->plotCurveConfigs().count() > 0)
|
|
|
|
options_page->lstCurves->setCurrentRow(0, QItemSelectionModel::ClearAndSelect);
|
|
|
|
|
|
|
|
connect(options_page->btnAddCurve, SIGNAL(clicked()), this, SLOT(on_btnAddCurve_clicked()));
|
|
|
|
connect(options_page->btnRemoveCurve, SIGNAL(clicked()), this, SLOT(on_btnRemoveCurve_clicked()));
|
|
|
|
connect(options_page->lstCurves, SIGNAL(currentRowChanged(int)), this, SLOT(on_lstCurves_currentRowChanged(int)));
|
|
|
|
connect(options_page->btnColor, SIGNAL(clicked()), this, SLOT(on_btnColor_clicked()));
|
|
|
|
|
|
|
|
setYAxisWidgetFromPlotCurve();
|
|
|
|
|
2011-01-31 03:09:44 +01:00
|
|
|
//logging path setup
|
|
|
|
options_page->LoggingPath->setExpectedKind(Utils::PathChooser::Directory);
|
|
|
|
options_page->LoggingPath->setPromptDialogTitle(tr("Choose Logging Directory"));
|
|
|
|
options_page->LoggingPath->setPath(m_config->getLoggingPath());
|
|
|
|
options_page->LoggingConnect->setChecked(m_config->getLoggingNewFileOnConnect());
|
|
|
|
options_page->LoggingEnable->setChecked(m_config->getLoggingEnabled());
|
|
|
|
connect(options_page->LoggingEnable, SIGNAL(clicked()), this, SLOT(on_loggingEnable_clicked()));
|
|
|
|
on_loggingEnable_clicked();
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-08-10 07:42:39 +02:00
|
|
|
return optionsPageWidget;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ScopeGadgetOptionsPage::on_btnColor_clicked()
|
|
|
|
{
|
|
|
|
QColor color = QColorDialog::getColor( QColor(options_page->btnColor->text()), options_page->widget);
|
|
|
|
if (color.isValid()) {
|
|
|
|
setButtonColor(color);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
\brief Populate the widgets that containts the configs for the Y-Axis from
|
|
|
|
the selected plot curve
|
|
|
|
*/
|
|
|
|
void ScopeGadgetOptionsPage::setYAxisWidgetFromPlotCurve()
|
|
|
|
{
|
|
|
|
bool parseOK = false;
|
|
|
|
QListWidgetItem* listItem = options_page->lstCurves->currentItem();
|
|
|
|
|
|
|
|
if(listItem == 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
int currentIndex = options_page->cmbUAVObjects->findText( listItem->data(Qt::UserRole + 0).toString());
|
|
|
|
options_page->cmbUAVObjects->setCurrentIndex(currentIndex);
|
|
|
|
|
|
|
|
currentIndex = options_page->cmbUAVField->findText( listItem->data(Qt::UserRole + 1).toString());
|
|
|
|
options_page->cmbUAVField->setCurrentIndex(currentIndex);
|
|
|
|
|
|
|
|
currentIndex = options_page->cmbScale->findData( listItem->data(Qt::UserRole + 2), Qt::UserRole, Qt::MatchExactly);
|
|
|
|
options_page->cmbScale->setCurrentIndex(currentIndex);
|
|
|
|
|
|
|
|
QVariant varColor = listItem->data(Qt::UserRole + 3);
|
|
|
|
int rgb = varColor.toInt(&parseOK);
|
|
|
|
|
|
|
|
setButtonColor(QColor((QRgb)rgb));
|
|
|
|
}
|
|
|
|
|
|
|
|
void ScopeGadgetOptionsPage::setButtonColor(const QColor &color)
|
|
|
|
{
|
2010-08-30 00:45:12 +02:00
|
|
|
options_page->btnColor->setAutoFillBackground(true);
|
2010-08-10 07:42:39 +02:00
|
|
|
options_page->btnColor->setText(color.name());
|
|
|
|
options_page->btnColor->setPalette(QPalette(color));
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
\brief When a new UAVObject is selected, populate the UAVObject field combo box with the correct values.
|
|
|
|
*/
|
|
|
|
void ScopeGadgetOptionsPage::on_cmbUAVObjects_currentIndexChanged(QString val)
|
|
|
|
{
|
|
|
|
options_page->cmbUAVField->clear();
|
|
|
|
|
|
|
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
|
|
|
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
|
|
|
UAVDataObject* obj = dynamic_cast<UAVDataObject*>( objManager->getObject(val) );
|
|
|
|
|
|
|
|
QList<UAVObjectField*> fieldList = obj->getFields();
|
|
|
|
foreach (UAVObjectField* field, fieldList) {
|
2010-08-30 16:17:15 +02:00
|
|
|
if(field->getType() == UAVObjectField::STRING || field->getType() == UAVObjectField::ENUM )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if(field->getElementNames().count() > 1)
|
|
|
|
{
|
|
|
|
foreach(QString elemName , field->getElementNames())
|
|
|
|
{
|
|
|
|
options_page->cmbUAVField->addItem(field->getName() + "-" + elemName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
options_page->cmbUAVField->addItem(field->getName());
|
2010-08-10 07:42:39 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called when the user presses apply or OK.
|
|
|
|
*
|
|
|
|
* Saves the current values
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void ScopeGadgetOptionsPage::apply()
|
|
|
|
{
|
|
|
|
bool parseOK = false;
|
|
|
|
|
|
|
|
//Apply configuration changes
|
|
|
|
m_config->setPlotType(options_page->cmbPlotType->currentIndex());
|
|
|
|
m_config->setDataSize(options_page->spnDataSize->value());
|
|
|
|
m_config->setRefreashInterval(options_page->spnRefreshInterval->value());
|
|
|
|
|
2010-08-30 16:17:15 +02:00
|
|
|
QList<PlotCurveConfiguration*> plotCurveConfigs;
|
2010-08-10 07:42:39 +02:00
|
|
|
for(int iIndex = 0; iIndex < options_page->lstCurves->count();iIndex++) {
|
|
|
|
QListWidgetItem* listItem = options_page->lstCurves->item(iIndex);
|
|
|
|
|
|
|
|
PlotCurveConfiguration* newPlotCurveConfigs = new PlotCurveConfiguration();
|
|
|
|
newPlotCurveConfigs->uavObject = listItem->data(Qt::UserRole + 0).toString();
|
|
|
|
newPlotCurveConfigs->uavField = listItem->data(Qt::UserRole + 1).toString();
|
|
|
|
newPlotCurveConfigs->yScalePower = listItem->data(Qt::UserRole + 2).toInt(&parseOK);
|
|
|
|
if(!parseOK)
|
|
|
|
newPlotCurveConfigs->yScalePower = 0;
|
|
|
|
|
|
|
|
QVariant varColor = listItem->data(Qt::UserRole + 3);
|
|
|
|
int rgb = varColor.toInt(&parseOK);
|
|
|
|
if(!parseOK)
|
|
|
|
newPlotCurveConfigs->color = QColor(Qt::black).rgb();
|
|
|
|
else
|
|
|
|
newPlotCurveConfigs->color = (QRgb)rgb;
|
|
|
|
|
2010-08-30 16:17:15 +02:00
|
|
|
plotCurveConfigs.append(newPlotCurveConfigs);
|
2010-08-10 07:42:39 +02:00
|
|
|
}
|
|
|
|
|
2010-08-30 16:17:15 +02:00
|
|
|
m_config->replacePlotCurveConfig(plotCurveConfigs);
|
2011-01-31 03:09:44 +01:00
|
|
|
|
|
|
|
//save the logging config
|
|
|
|
m_config->setLoggingPath(options_page->LoggingPath->path());
|
|
|
|
m_config->setLoggingNewFileOnConnect(options_page->LoggingConnect->isChecked());
|
|
|
|
m_config->setLoggingEnabled(options_page->LoggingEnable->isChecked());
|
|
|
|
|
2010-08-10 07:42:39 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
\brief Add a new curve to the plot.
|
|
|
|
*/
|
|
|
|
void ScopeGadgetOptionsPage::on_btnAddCurve_clicked()
|
|
|
|
{
|
|
|
|
bool parseOK = false;
|
|
|
|
QString uavObject = options_page->cmbUAVObjects->currentText();
|
|
|
|
QString uavField = options_page->cmbUAVField->currentText();
|
|
|
|
int scale = options_page->cmbScale->itemData(options_page->cmbScale->currentIndex()).toInt(&parseOK);
|
|
|
|
|
|
|
|
if(!parseOK)
|
|
|
|
scale = 0;
|
|
|
|
|
|
|
|
|
|
|
|
QVariant varColor = (int)QColor(options_page->btnColor->text()).rgb();
|
|
|
|
|
2010-08-30 16:17:15 +02:00
|
|
|
//Find an existing plot curve config based on the uavobject and uav field. If it
|
2010-08-30 00:45:12 +02:00
|
|
|
//exists, update it, else add a new one.
|
2010-08-31 04:11:19 +02:00
|
|
|
if(options_page->lstCurves->count() &&
|
|
|
|
options_page->lstCurves->currentItem()->text() == uavObject + "." + uavField)
|
2010-08-30 00:45:12 +02:00
|
|
|
{
|
|
|
|
QListWidgetItem *listWidgetItem = options_page->lstCurves->currentItem();
|
|
|
|
setCurvePlotProperties(listWidgetItem,uavObject,uavField,scale,varColor);
|
|
|
|
}else
|
|
|
|
{
|
|
|
|
addPlotCurveConfig(uavObject,uavField,scale,varColor);
|
2010-08-10 07:42:39 +02:00
|
|
|
|
2010-08-30 00:45:12 +02:00
|
|
|
options_page->lstCurves->setCurrentRow(options_page->lstCurves->count() - 1);
|
|
|
|
}
|
2010-08-10 07:42:39 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void ScopeGadgetOptionsPage::addPlotCurveConfig(QString uavObject, QString uavField, int scale, QVariant varColor)
|
|
|
|
{
|
|
|
|
//Add a new curve config to the list
|
|
|
|
QString listItemDisplayText = uavObject + "." + uavField;
|
|
|
|
options_page->lstCurves->addItem(listItemDisplayText);
|
|
|
|
QListWidgetItem *listWidgetItem = options_page->lstCurves->item(options_page->lstCurves->count() - 1);
|
|
|
|
|
2010-08-30 00:45:12 +02:00
|
|
|
setCurvePlotProperties(listWidgetItem,uavObject,uavField,scale,varColor);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void ScopeGadgetOptionsPage::setCurvePlotProperties(QListWidgetItem *listWidgetItem,QString uavObject, QString uavField, int scale, QVariant varColor)
|
|
|
|
{
|
|
|
|
bool parseOK = false;
|
|
|
|
|
2010-08-10 07:42:39 +02:00
|
|
|
//Set the properties of the newly added list item
|
2010-08-30 00:45:12 +02:00
|
|
|
QString listItemDisplayText = uavObject + "." + uavField;
|
2010-08-10 07:42:39 +02:00
|
|
|
QRgb rgbColor = (QRgb)varColor.toInt(&parseOK);
|
|
|
|
QColor color = QColor( rgbColor );
|
2010-08-30 00:45:12 +02:00
|
|
|
//listWidgetItem->setText(listItemDisplayText);
|
2010-08-10 07:42:39 +02:00
|
|
|
listWidgetItem->setTextColor( color );
|
|
|
|
|
|
|
|
//Store some additional data for the plot curve on the list item
|
|
|
|
listWidgetItem->setData(Qt::UserRole + 0,QVariant(uavObject));
|
|
|
|
listWidgetItem->setData(Qt::UserRole + 1,QVariant(uavField));
|
|
|
|
listWidgetItem->setData(Qt::UserRole + 2,QVariant(scale));
|
|
|
|
listWidgetItem->setData(Qt::UserRole + 3,varColor);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
Remove a curve config from the plot.
|
|
|
|
*/
|
|
|
|
void ScopeGadgetOptionsPage::on_btnRemoveCurve_clicked()
|
|
|
|
{
|
|
|
|
options_page->lstCurves->takeItem(options_page->lstCurves->currentIndex().row());
|
|
|
|
}
|
|
|
|
|
|
|
|
void ScopeGadgetOptionsPage::finish()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
When a different plot curve config is selected, populate its values into the widgets.
|
|
|
|
*/
|
|
|
|
void ScopeGadgetOptionsPage::on_lstCurves_currentRowChanged(int currentRow)
|
|
|
|
{
|
2010-09-21 21:29:43 +02:00
|
|
|
Q_UNUSED(currentRow);
|
2010-08-10 07:42:39 +02:00
|
|
|
setYAxisWidgetFromPlotCurve();
|
|
|
|
}
|
2011-01-31 03:09:44 +01:00
|
|
|
|
|
|
|
void ScopeGadgetOptionsPage::on_loggingEnable_clicked()
|
|
|
|
{
|
|
|
|
bool en = options_page->LoggingEnable->isChecked();
|
|
|
|
options_page->LoggingPath->setEnabled(en);
|
|
|
|
options_page->LoggingConnect->setEnabled(en);
|
|
|
|
options_page->LoggingLabel->setEnabled(en);
|
|
|
|
|
|
|
|
}
|