Newer
Older
Michael Carpenter
committed
#include "UASQuickView.h"
#include <QMetaMethod>
#include <QDebug>
#include "UASQuickViewItemSelect.h"
Michael Carpenter
committed
#include "UASQuickViewTextItem.h"
Michael Carpenter
committed
#include <QSettings>
UASQuickView::UASQuickView(QWidget *parent) :
QWidget(parent),
m_ui(new Ui::UASQuickView)
Michael Carpenter
committed
{
m_ui->setupUi(this);
quickViewSelectDialog=0;
Michael Carpenter
committed
connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(setActiveUAS(UASInterface*)));
connect(UASManager::instance(),SIGNAL(UASCreated(UASInterface*)),this,SLOT(addUAS(UASInterface*)));
if (UASManager::instance()->getActiveUAS())
{
addUAS(UASManager::instance()->getActiveUAS());
}
this->setContextMenuPolicy(Qt::ActionsContextMenu);
loadSettings();
Michael Carpenter
committed
//If we don't have any predefined settings, set some defaults.
if (uasPropertyValueMap.size() == 0)
{
valueEnabled("altitude");
valueEnabled("groundSpeed");
valueEnabled("distToWaypoint");
valueEnabled("yaw");
valueEnabled("roll");
}
QAction *action = new QAction("Add Item",this);
action->setCheckable(false);
connect(action,SIGNAL(triggered()),this,SLOT(actionTriggered()));
this->addAction(action);
Michael Carpenter
committed
Michael Carpenter
committed
updateTimer = new QTimer(this);
connect(updateTimer,SIGNAL(timeout()),this,SLOT(updateTimerTick()));
}
void UASQuickView::actionTriggered()
{
if (quickViewSelectDialog)
Michael Carpenter
committed
{
quickViewSelectDialog->show();
return;
Michael Carpenter
committed
}
quickViewSelectDialog = new UASQuickViewItemSelect();
connect(quickViewSelectDialog,SIGNAL(destroyed()),this,SLOT(selectDialogClosed()));
connect(quickViewSelectDialog,SIGNAL(valueDisabled(QString)),this,SLOT(valueDisabled(QString)));
connect(quickViewSelectDialog,SIGNAL(valueEnabled(QString)),this,SLOT(valueEnabled(QString)));
quickViewSelectDialog->setAttribute(Qt::WA_DeleteOnClose,true);
for (QMap<QString,double>::const_iterator i = uasPropertyValueMap.constBegin();i!=uasPropertyValueMap.constEnd();i++)
{
quickViewSelectDialog->addItem(i.key(),uasEnabledPropertyList.contains(i.key()));
}
quickViewSelectDialog->show();
}
Michael Carpenter
committed
void UASQuickView::saveSettings()
{
Michael Carpenter
committed
QSettings settings;
settings.beginWriteArray("UAS_QUICK_VIEW_ITEMS");
int count = 0;
for (QMap<QString,UASQuickViewItem*>::const_iterator i = uasPropertyToLabelMap.constBegin();i!=uasPropertyToLabelMap.constEnd();i++)
Michael Carpenter
committed
{
Michael Carpenter
committed
settings.setArrayIndex(count++);
settings.setValue("name",i.key());
settings.setValue("type","text");
Michael Carpenter
committed
}
Michael Carpenter
committed
settings.endArray();
settings.sync();
}
Michael Carpenter
committed
void UASQuickView::loadSettings()
{
QSettings settings;
int size = settings.beginReadArray("UAS_QUICK_VIEW_ITEMS");
for (int i=0;i<size;i++)
Michael Carpenter
committed
{
settings.setArrayIndex(i);
QString nameval = settings.value("name").toString();
QString typeval = settings.value("type").toString();
if (typeval == "text" && !uasPropertyToLabelMap.contains(nameval))
{
valueEnabled(nameval);
}
Michael Carpenter
committed
}
}
Michael Carpenter
committed
void UASQuickView::valueEnabled(QString value)
{
Michael Carpenter
committed
UASQuickViewItem *item = new UASQuickViewTextItem(this);
item->setTitle(value);
m_ui->verticalLayout->addWidget(item);
uasPropertyToLabelMap[value] = item;
uasEnabledPropertyList.append(value);
if (!uasPropertyValueMap.contains(value))
Michael Carpenter
committed
{
uasPropertyValueMap[value] = 0;
Michael Carpenter
committed
}
saveSettings();
Michael Carpenter
committed
}
void UASQuickView::valueDisabled(QString value)
{
if (uasPropertyToLabelMap.contains(value))
Michael Carpenter
committed
{
UASQuickViewItem *item = uasPropertyToLabelMap[value];
uasPropertyToLabelMap.remove(value);
item->hide();
m_ui->verticalLayout->removeWidget(item);
item->deleteLater();
uasEnabledPropertyList.removeOne(value);
saveSettings();
Michael Carpenter
committed
}
}
Michael Carpenter
committed
void UASQuickView::selectDialogClosed()
{
quickViewSelectDialog = 0;
Michael Carpenter
committed
}
Michael Carpenter
committed
void UASQuickView::updateTimerTick()
{
//uasPropertyValueMap
for (QMap<QString,UASQuickViewItem*>::const_iterator i = uasPropertyToLabelMap.constBegin(); i != uasPropertyToLabelMap.constEnd();i++)
Michael Carpenter
committed
{
if (uasPropertyValueMap.contains(i.key()))
Michael Carpenter
committed
{
i.value()->setValue(uasPropertyValueMap[i.key()]);
Michael Carpenter
committed
}
}
}
void UASQuickView::addUAS(UASInterface* uas)
{
if (uas)
{
if (!this->uas)
{
setActiveUAS(uas);
}
}
}
void UASQuickView::setActiveUAS(UASInterface* uas)
{
Bryant
committed
// Clean up from the old UAS
Michael Carpenter
committed
{
Bryant
committed
uasPropertyValueMap.clear();
foreach (UASQuickViewItem* i, uasPropertyToLabelMap.values())
{
i->deleteLater();
}
Bryant
committed
uasPropertyToLabelMap.clear();
foreach (QAction* i, this->actions())
{
i->deleteLater();
}
Michael Carpenter
committed
}
// Update the UAS to point to the new one.
Michael Carpenter
committed
this->uas = uas;
if (this->uas)
{
connect(uas,SIGNAL(valueChanged(int,QString,QString,QVariant,quint64)),this,SLOT(valueChanged(int,QString,QString,QVariant,quint64)));
updateTimer->start(1000);
}
}
void UASQuickView::addSource(MAVLinkDecoder *decoder)
{
connect(decoder,SIGNAL(valueChanged(int,QString,QString,double,quint64)),this,SLOT(valueChanged(int,QString,QString,double,quint64)));
connect(decoder,SIGNAL(valueChanged(int,QString,QString,qint8,quint64)),this,SLOT(valueChanged(int,QString,QString,qint8,quint64)));
connect(decoder,SIGNAL(valueChanged(int,QString,QString,qint16,quint64)),this,SLOT(valueChanged(int,QString,QString,qint16,quint64)));
connect(decoder,SIGNAL(valueChanged(int,QString,QString,qint32,quint64)),this,SLOT(valueChanged(int,QString,QString,qint32,quint64)));
connect(decoder,SIGNAL(valueChanged(int,QString,QString,qint64,quint64)),this,SLOT(valueChanged(int,QString,QString,qint64,quint64)));
connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint8,quint64)),this,SLOT(valueChanged(int,QString,QString,quint8,quint64)));
connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint16,quint64)),this,SLOT(valueChanged(int,QString,QString,quint16,quint64)));
connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint32,quint64)),this,SLOT(valueChanged(int,QString,QString,quint32,quint64)));
connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint64,quint64)),this,SLOT(valueChanged(int,QString,QString,quint64,quint64)));
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint8 value, const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
{
if (quickViewSelectDialog)
{
quickViewSelectDialog->addItem(name);
}
}
uasPropertyValueMap[name] = value;
Michael Carpenter
committed
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint8 value, const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
{
if (quickViewSelectDialog)
{
quickViewSelectDialog->addItem(name);
}
}
uasPropertyValueMap[name] = value;
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint16 value, const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
{
if (quickViewSelectDialog)
{
quickViewSelectDialog->addItem(name);
}
}
uasPropertyValueMap[name] = value;
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint16 value, const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
{
if (quickViewSelectDialog)
{
quickViewSelectDialog->addItem(name);
}
}
uasPropertyValueMap[name] = value;
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint32 value, const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
{
if (quickViewSelectDialog)
{
quickViewSelectDialog->addItem(name);
}
// And periodically update the view.
updateTimer->start(1000);
}
uasPropertyValueMap[name] = value;
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint32 value, const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
{
if (quickViewSelectDialog)
{
quickViewSelectDialog->addItem(name);
}
}
uasPropertyValueMap[name] = value;
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
{
if (quickViewSelectDialog)
{
quickViewSelectDialog->addItem(name);
}
}
uasPropertyValueMap[name] = value;
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
Michael Carpenter
committed
{
if (quickViewSelectDialog)
Michael Carpenter
committed
{
quickViewSelectDialog->addItem(name);
Michael Carpenter
committed
}
Bryant
committed
// And periodically update the view.
updateTimer->start(1000);
Michael Carpenter
committed
}
uasPropertyValueMap[name] = value;
Michael Carpenter
committed
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
{
if (quickViewSelectDialog)
{
quickViewSelectDialog->addItem(name);
}
}
uasPropertyValueMap[name] = value;
}
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const QVariant value,const quint64 msec)
{
Q_UNUSED(uasId);
Q_UNUSED(unit);
Q_UNUSED(msec);
if (!uasPropertyValueMap.contains(name))
{
if (quickViewSelectDialog)
{
quickViewSelectDialog->addItem(name);
}
}
uasPropertyValueMap[name] = value.toDouble();
}
Michael Carpenter
committed
void UASQuickView::actionTriggered(bool checked)
{
QAction *senderlabel = qobject_cast<QAction*>(sender());
if (!senderlabel)
{
return;
}
if (checked)
{
Michael Carpenter
committed
UASQuickViewItem *item = new UASQuickViewTextItem(this);
Michael Carpenter
committed
item->setTitle(senderlabel->text());
this->layout()->addWidget(item);
Michael Carpenter
committed
uasPropertyToLabelMap[senderlabel->text()] = item;
}
else
{
this->layout()->removeWidget(uasPropertyToLabelMap[senderlabel->text()]);
Michael Carpenter
committed
uasPropertyToLabelMap[senderlabel->text()]->deleteLater();
Michael Carpenter
committed
uasPropertyToLabelMap.remove(senderlabel->text());
Michael Carpenter
committed
}
}
void UASQuickView::valChanged(double val,QString type)
{