UASQuickView.cc 10.4 KB
Newer Older
1 2 3
#include "UASQuickView.h"
#include <QMetaMethod>
#include <QDebug>
4
#include "UASQuickViewItemSelect.h"
5
#include "UASQuickViewTextItem.h"
6
#include <QSettings>
7

8 9 10
UASQuickView::UASQuickView(QWidget *parent) :
    QWidget(parent),
    m_ui(new Ui::UASQuickView)
11
{
12
    m_ui->setupUi(this);
13
    quickViewSelectDialog=0;
14

15 16 17 18 19 20 21 22
    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);

23
    loadSettings();
24 25 26 27 28 29 30 31 32
    //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");
    }
33 34 35 36 37

    QAction *action = new QAction("Add Item",this);
    action->setCheckable(false);
    connect(action,SIGNAL(triggered()),this,SLOT(actionTriggered()));
    this->addAction(action);
38

39 40 41 42
    updateTimer = new QTimer(this);
    connect(updateTimer,SIGNAL(timeout()),this,SLOT(updateTimerTick()));
}

43 44 45
void UASQuickView::actionTriggered()
{
    if (quickViewSelectDialog)
46
    {
47 48
        quickViewSelectDialog->show();
        return;
49
    }
50 51 52 53 54 55 56 57 58 59 60
    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();
}
61

62
void UASQuickView::saveSettings()
63
{
64 65 66 67
    QSettings settings;
    settings.beginWriteArray("UAS_QUICK_VIEW_ITEMS");
    int count = 0;
    for (QMap<QString,UASQuickViewItem*>::const_iterator i = uasPropertyToLabelMap.constBegin();i!=uasPropertyToLabelMap.constEnd();i++)
68
    {
69 70 71
        settings.setArrayIndex(count++);
        settings.setValue("name",i.key());
        settings.setValue("type","text");
72
    }
73 74
    settings.endArray();
    settings.sync();
75
}
76

77 78 79 80 81
void UASQuickView::loadSettings()
{
    QSettings settings;
    int size = settings.beginReadArray("UAS_QUICK_VIEW_ITEMS");
    for (int i=0;i<size;i++)
82
    {
83 84 85 86 87 88 89
        settings.setArrayIndex(i);
        QString nameval = settings.value("name").toString();
        QString typeval = settings.value("type").toString();
        if (typeval == "text" && !uasPropertyToLabelMap.contains(nameval))
        {
            valueEnabled(nameval);
        }
90
    }
91
}
92

93 94
void UASQuickView::valueEnabled(QString value)
{
95
    UASQuickViewItem *item = new UASQuickViewTextItem(this);
96
    item->setTitle(value);
97
    m_ui->verticalLayout->addWidget(item);
98 99 100
    uasPropertyToLabelMap[value] = item;
    uasEnabledPropertyList.append(value);
    if (!uasPropertyValueMap.contains(value))
101
    {
102
        uasPropertyValueMap[value] = 0;
103
    }
104
    saveSettings();
105

106
}
107 108 109 110

void UASQuickView::valueDisabled(QString value)
{
    if (uasPropertyToLabelMap.contains(value))
111
    {
112 113 114
        UASQuickViewItem *item = uasPropertyToLabelMap[value];
        uasPropertyToLabelMap.remove(value);
        item->hide();
115
        m_ui->verticalLayout->removeWidget(item);
116 117
        item->deleteLater();
        uasEnabledPropertyList.removeOne(value);
118
        saveSettings();
119
    }
120
}
121

122 123 124
void UASQuickView::selectDialogClosed()
{
    quickViewSelectDialog = 0;
125
}
126

127 128
void UASQuickView::updateTimerTick()
{
129 130
    //uasPropertyValueMap
    for (QMap<QString,UASQuickViewItem*>::const_iterator i = uasPropertyToLabelMap.constBegin(); i != uasPropertyToLabelMap.constEnd();i++)
131
    {
132
        if (uasPropertyValueMap.contains(i.key()))
133
        {
134
            i.value()->setValue(uasPropertyValueMap[i.key()]);
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
        }
    }
}

void UASQuickView::addUAS(UASInterface* uas)
{
    if (uas)
    {
        if (!this->uas)
        {
            setActiveUAS(uas);
        }
    }
}

void UASQuickView::setActiveUAS(UASInterface* uas)
{
152
    if (this->uas)
153
    {
154
        updateTimer->stop();
155
    }
156

157
    this->uas = uas;
158 159 160 161 162 163

    if (this->uas)
    {
        connect(uas,SIGNAL(valueChanged(int,QString,QString,QVariant,quint64)),this,SLOT(valueChanged(int,QString,QString,QVariant,quint64)));
        updateTimer->start(1000);
    }
164
}
165

166 167 168 169 170 171 172 173 174 175 176 177
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)));
}
178

179 180
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint8 value, const quint64 msec)
{
181 182 183
    Q_UNUSED(uasId);
    Q_UNUSED(unit);
    Q_UNUSED(msec);
184 185 186 187 188 189 190 191
    if (!uasPropertyValueMap.contains(name))
    {
        if (quickViewSelectDialog)
        {
            quickViewSelectDialog->addItem(name);
        }
    }
    uasPropertyValueMap[name] = value;
192
}
193 194 195

void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint8 value, const quint64 msec)
{
196 197 198
    Q_UNUSED(uasId);
    Q_UNUSED(unit);
    Q_UNUSED(msec);
199 200 201 202 203 204 205 206 207
    if (!uasPropertyValueMap.contains(name))
    {
        if (quickViewSelectDialog)
        {
            quickViewSelectDialog->addItem(name);
        }
    }
    uasPropertyValueMap[name] = value;
}
208

209 210
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint16 value, const quint64 msec)
{
211 212 213
    Q_UNUSED(uasId);
    Q_UNUSED(unit);
    Q_UNUSED(msec);
214 215 216 217 218 219 220 221 222
    if (!uasPropertyValueMap.contains(name))
    {
        if (quickViewSelectDialog)
        {
            quickViewSelectDialog->addItem(name);
        }
    }
    uasPropertyValueMap[name] = value;
}
223

224 225
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint16 value, const quint64 msec)
{
226 227 228
    Q_UNUSED(uasId);
    Q_UNUSED(unit);
    Q_UNUSED(msec);
229 230 231 232 233 234 235 236 237
    if (!uasPropertyValueMap.contains(name))
    {
        if (quickViewSelectDialog)
        {
            quickViewSelectDialog->addItem(name);
        }
    }
    uasPropertyValueMap[name] = value;
}
238

239 240
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint32 value, const quint64 msec)
{
241 242 243
    Q_UNUSED(uasId);
    Q_UNUSED(unit);
    Q_UNUSED(msec);
244 245 246 247 248 249 250 251 252
    if (!uasPropertyValueMap.contains(name))
    {
        if (quickViewSelectDialog)
        {
            quickViewSelectDialog->addItem(name);
        }
    }
    uasPropertyValueMap[name] = value;
}
253

254 255
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint32 value, const quint64 msec)
{
256 257 258
    Q_UNUSED(uasId);
    Q_UNUSED(unit);
    Q_UNUSED(msec);
259 260 261 262 263 264 265 266 267
    if (!uasPropertyValueMap.contains(name))
    {
        if (quickViewSelectDialog)
        {
            quickViewSelectDialog->addItem(name);
        }
    }
    uasPropertyValueMap[name] = value;
}
268

269 270
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec)
{
271 272 273
    Q_UNUSED(uasId);
    Q_UNUSED(unit);
    Q_UNUSED(msec);
274 275 276 277 278 279 280 281 282
    if (!uasPropertyValueMap.contains(name))
    {
        if (quickViewSelectDialog)
        {
            quickViewSelectDialog->addItem(name);
        }
    }
    uasPropertyValueMap[name] = value;
}
283

284 285
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec)
{
286 287 288
    Q_UNUSED(uasId);
    Q_UNUSED(unit);
    Q_UNUSED(msec);
289
    if (!uasPropertyValueMap.contains(name))
290
    {
291
        if (quickViewSelectDialog)
292
        {
293
            quickViewSelectDialog->addItem(name);
294 295
        }
    }
296
    uasPropertyValueMap[name] = value;
297
}
298

299 300
void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec)
{
301 302 303
    Q_UNUSED(uasId);
    Q_UNUSED(unit);
    Q_UNUSED(msec);
304 305 306 307 308 309 310 311 312 313
    if (!uasPropertyValueMap.contains(name))
    {
        if (quickViewSelectDialog)
        {
            quickViewSelectDialog->addItem(name);
        }
    }
    uasPropertyValueMap[name] = value;
}

314 315 316 317 318 319 320 321
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);
    uasPropertyValueMap[name] = value.toDouble();
}

322 323 324 325 326 327 328 329 330
void UASQuickView::actionTriggered(bool checked)
{
    QAction *senderlabel = qobject_cast<QAction*>(sender());
    if (!senderlabel)
    {
        return;
    }
    if (checked)
    {
331
        UASQuickViewItem *item = new UASQuickViewTextItem(this);
332
        item->setTitle(senderlabel->text());
333
        this->layout()->addWidget(item);
334 335 336 337
        uasPropertyToLabelMap[senderlabel->text()] = item;
    }
    else
    {
338
        this->layout()->removeWidget(uasPropertyToLabelMap[senderlabel->text()]);
339
        uasPropertyToLabelMap[senderlabel->text()]->deleteLater();
340 341
        uasPropertyToLabelMap.remove(senderlabel->text());

342 343 344 345 346
    }
}

void UASQuickView::valChanged(double val,QString type)
{
347 348
    Q_UNUSED(val);
    Q_UNUSED(type);
349
}