Newer
Older
Michael Carpenter
committed
#include "UASQuickView.h"
#include <QMetaMethod>
#include <QDebug>
UASQuickView::UASQuickView(QWidget *parent) :
QWidget(parent),
m_ui(new Ui::UASQuickView)
Michael Carpenter
committed
{
m_ui->setupUi(this);
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);
{
QAction *action = new QAction(tr("latitude"),this);
Michael Carpenter
committed
action->setCheckable(true);
action->setChecked(true);
connect(action,SIGNAL(toggled(bool)),this,SLOT(actionTriggered(bool)));
this->addAction(action);
UASQuickViewItem *item = new UASQuickViewItem(this);
item->setTitle(tr("latitude"));
this->layout()->addWidget(item);
Michael Carpenter
committed
uasPropertyToLabelMap["latitude"] = item;
}
{
QAction *action = new QAction(tr("longitude"),this);
Michael Carpenter
committed
action->setCheckable(true);
action->setChecked(true);
connect(action,SIGNAL(toggled(bool)),this,SLOT(actionTriggered(bool)));
this->addAction(action);
UASQuickViewItem *item = new UASQuickViewItem(this);
item->setTitle(tr("longitude"));
this->layout()->addWidget(item);
Michael Carpenter
committed
uasPropertyToLabelMap["longitude"] = item;
}
{
QAction *action = new QAction(tr("altitude"),this);
Michael Carpenter
committed
action->setCheckable(true);
action->setChecked(true);
connect(action,SIGNAL(toggled(bool)),this,SLOT(actionTriggered(bool)));
this->addAction(action);
UASQuickViewItem *item = new UASQuickViewItem(this);
item->setTitle(tr("altitude"));
this->layout()->addWidget(item);
Michael Carpenter
committed
uasPropertyToLabelMap["altitude"] = item;
}
Michael Carpenter
committed
{
QAction *action = new QAction(tr("satelliteCount"),this);
Michael Carpenter
committed
action->setCheckable(true);
action->setChecked(true);
connect(action,SIGNAL(toggled(bool)),this,SLOT(actionTriggered(bool)));
this->addAction(action);
UASQuickViewItem *item = new UASQuickViewItem(this);
item->setTitle(tr("satelliteCount"));
this->layout()->addWidget(item);
Michael Carpenter
committed
uasPropertyToLabelMap["satelliteCount"] = item;
}
Michael Carpenter
committed
{
QAction *action = new QAction(tr("distToWaypoint"),this);
Michael Carpenter
committed
action->setCheckable(true);
action->setChecked(true);
connect(action,SIGNAL(toggled(bool)),this,SLOT(actionTriggered(bool)));
this->addAction(action);
UASQuickViewItem *item = new UASQuickViewItem(this);
item->setTitle(tr("distToWaypoint"));
this->layout()->addWidget(item);
Michael Carpenter
committed
uasPropertyToLabelMap["distToWaypoint"] = item;
}
Michael Carpenter
committed
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
updateTimer = new QTimer(this);
connect(updateTimer,SIGNAL(timeout()),this,SLOT(updateTimerTick()));
updateTimer->start(1000);
}
void UASQuickView::updateTimerTick()
{
for (int i=0;i<uasPropertyList.size();i++)
{
if (uasPropertyValueMap.contains(uasPropertyList[i]) && uasPropertyToLabelMap.contains(uasPropertyList[i]))
{
uasPropertyToLabelMap[uasPropertyList[i]]->setValue(uasPropertyValueMap.value(uasPropertyList[i],0));
}
}
}
void UASQuickView::addUAS(UASInterface* uas)
{
if (uas)
{
if (!this->uas)
{
setActiveUAS(uas);
}
}
}
void UASQuickView::setActiveUAS(UASInterface* uas)
{
if (!uas)
{
return;
}
this->uas = uas;
Michael Carpenter
committed
connect(uas,SIGNAL(valueChanged(int,QString,QString,QVariant,quint64)),this,SLOT(valueChanged(int,QString,QString,QVariant,quint64)));
Michael Carpenter
committed
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
uasPropertyList.clear();
qDebug() << "UASInfoWidget property count:" << uas->metaObject()->propertyCount();
for (int i=0;i<uas->metaObject()->propertyCount();i++)
{
if (uas->metaObject()->property(i).hasNotifySignal())
{
qDebug() << "Property:" << i << uas->metaObject()->property(i).name();
uasPropertyList.append(uas->metaObject()->property(i).name());
if (!uasPropertyToLabelMap.contains(uas->metaObject()->property(i).name()))
{
QAction *action = new QAction(QString(uas->metaObject()->property(i).name()),this);
action->setCheckable(true);
connect(action,SIGNAL(toggled(bool)),this,SLOT(actionTriggered(bool)));
this->addAction(action);
}
qDebug() << "Signature:" << uas->metaObject()->property(i).notifySignal().signature();
int val = this->metaObject()->indexOfMethod("valChanged(double,QString)");
if (val != -1)
{
if (!connect(uas,uas->metaObject()->property(i).notifySignal(),this,this->metaObject()->method(val)))
{
qDebug() << "Error connecting signal";
}
}
}
}
}
void UASQuickView::actionTriggered(bool checked)
{
QAction *senderlabel = qobject_cast<QAction*>(sender());
if (!senderlabel)
{
return;
}
if (checked)
{
UASQuickViewItem *item = new UASQuickViewItem(this);
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
}
}
Michael Carpenter
committed
void UASQuickView::valueChanged(const int uasid, const QString& name, const QString& unit, const QVariant value,const quint64 msecs)
{
uasPropertyValueMap[name] = value.toDouble();
}
Michael Carpenter
committed
void UASQuickView::valChanged(double val,QString type)
{
//qDebug() << "Value changed:" << type << val;
Michael Carpenter
committed
// uasPropertyValueMap[type] = val;