WaypointView.cc 20.9 KB
Newer Older
pixhawk's avatar
pixhawk committed
1
/*===================================================================
pixhawk's avatar
pixhawk committed
2 3 4 5 6 7 8 9
======================================================================*/

/**
 * @file
 *   @brief Displays one waypoint
 *
 *   @author Lorenz Meier <mavteam@student.ethz.ch>
 *   @author Benjamin Knecht <mavteam@student.ethz.ch>
10
 *   @author Petri Tanskanen <mavteam@student.ethz.ch>
pixhawk's avatar
pixhawk committed
11 12 13 14 15 16
 *
 */

#include <QDoubleSpinBox>
#include <QDebug>

17 18
#include <cmath>
#include <qmath.h>
pixhawk's avatar
pixhawk committed
19

pixhawk's avatar
pixhawk committed
20 21
#include "WaypointView.h"
#include "ui_WaypointView.h"
22
#include "ui_QGCCustomWaypointAction.h"
pixhawk's avatar
pixhawk committed
23 24

WaypointView::WaypointView(Waypoint* wp, QWidget* parent) :
25 26 27 28
    QWidget(parent),
    customCommand(new Ui_QGCCustomWaypointAction),
    viewMode(QGC_WAYPOINTVIEW_MODE_NAV),
    m_ui(new Ui::WaypointView)
pixhawk's avatar
pixhawk committed
29 30 31 32
{
    m_ui->setupUi(this);

    this->wp = wp;
pixhawk's avatar
pixhawk committed
33
    connect(wp, SIGNAL(destroyed(QObject*)), this, SLOT(deleted(QObject*)));
34

35 36 37
    // CUSTOM COMMAND WIDGET
    customCommand->setupUi(m_ui->customActionWidget);

38
    // add actions
39 40 41 42 43 44 45
    m_ui->comboBox_action->addItem(tr("NAV: Waypoint"),MAV_CMD_NAV_WAYPOINT);
    m_ui->comboBox_action->addItem(tr("NAV: TakeOff"),MAV_CMD_NAV_TAKEOFF);
    m_ui->comboBox_action->addItem(tr("NAV: Loiter Unlim."),MAV_CMD_NAV_LOITER_UNLIM);
    m_ui->comboBox_action->addItem(tr("NAV: Loiter Time"),MAV_CMD_NAV_LOITER_TIME);
    m_ui->comboBox_action->addItem(tr("NAV: Loiter Turns"),MAV_CMD_NAV_LOITER_TURNS);
    m_ui->comboBox_action->addItem(tr("NAV: Ret. to Launch"),MAV_CMD_NAV_RETURN_TO_LAUNCH);
    m_ui->comboBox_action->addItem(tr("NAV: Land"),MAV_CMD_NAV_LAND);
lm's avatar
lm committed
46 47 48 49
//    m_ui->comboBox_action->addItem(tr("NAV: Target"),MAV_CMD_NAV_TARGET);
    //m_ui->comboBox_action->addItem(tr("IF: Delay over"),MAV_CMD_CONDITION_DELAY);
    //m_ui->comboBox_action->addItem(tr("IF: Yaw angle is"),MAV_CMD_CONDITION_YAW);
    //m_ui->comboBox_action->addItem(tr("DO: Jump to Index"),MAV_CMD_DO_JUMP);
50
    m_ui->comboBox_action->addItem(tr("Other"), MAV_CMD_ENUM_END);
51

52
    // add frames
53 54
    m_ui->comboBox_frame->addItem("Abs. Alt/Global",MAV_FRAME_GLOBAL);
    m_ui->comboBox_frame->addItem("Rel. Alt/Global", MAV_FRAME_GLOBAL_RELATIVE_ALT);
55
    m_ui->comboBox_frame->addItem("Local/Abs. Alt.",MAV_FRAME_LOCAL_NED);
56 57 58 59 60
    m_ui->comboBox_frame->addItem("Mission",MAV_FRAME_MISSION);

    // Initialize view correctly
    updateActionView(wp->getAction());
    updateFrameView(wp->getFrame());
61

pixhawk's avatar
pixhawk committed
62
    // Read values and set user interface
63
    updateValues();
pixhawk's avatar
pixhawk committed
64

65
    // Check for mission frame
66
    if (wp->getFrame() == MAV_FRAME_MISSION) {
67 68 69
        m_ui->comboBox_action->setCurrentIndex(m_ui->comboBox_action->count()-1);
    }

70 71 72 73
    connect(m_ui->posNSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setX(double)));
    connect(m_ui->posESpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setY(double)));
    connect(m_ui->posDSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setZ(double)));

74 75 76
    connect(m_ui->latSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setLatitude(double)));
    connect(m_ui->lonSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setLongitude(double)));
    connect(m_ui->altSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setAltitude(double)));
lm's avatar
lm committed
77
    connect(m_ui->yawSpinBox, SIGNAL(valueChanged(int)), wp, SLOT(setYaw(int)));
pixhawk's avatar
pixhawk committed
78 79 80 81 82

    connect(m_ui->upButton, SIGNAL(clicked()), this, SLOT(moveUp()));
    connect(m_ui->downButton, SIGNAL(clicked()), this, SLOT(moveDown()));
    connect(m_ui->removeButton, SIGNAL(clicked()), this, SLOT(remove()));

pixhawk's avatar
pixhawk committed
83 84
    connect(m_ui->autoContinue, SIGNAL(stateChanged(int)), this, SLOT(changedAutoContinue(int)));
    connect(m_ui->selectedBox, SIGNAL(stateChanged(int)), this, SLOT(changedCurrent(int)));
85 86
    connect(m_ui->comboBox_action, SIGNAL(activated(int)), this, SLOT(changedAction(int)));
    connect(m_ui->comboBox_frame, SIGNAL(activated(int)), this, SLOT(changedFrame(int)));
pixhawk's avatar
pixhawk committed
87

88 89
    connect(m_ui->orbitSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setLoiterOrbit(double)));
    connect(m_ui->acceptanceSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setAcceptanceRadius(double)));
lm's avatar
lm committed
90
    connect(m_ui->holdTimeSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setHoldTime(double)));
91
    connect(m_ui->turnsSpinBox, SIGNAL(valueChanged(int)), wp, SLOT(setTurns(int)));
92
    connect(m_ui->takeOffAngleSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam1(double)));
93 94 95 96 97 98 99

    // Connect actions
    connect(customCommand->commandSpinBox, SIGNAL(valueChanged(int)),   wp, SLOT(setAction(int)));
    connect(customCommand->param1SpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam1(double)));
    connect(customCommand->param2SpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam2(double)));
    connect(customCommand->param3SpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam3(double)));
    connect(customCommand->param4SpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam4(double)));
100 101
    connect(customCommand->param5SpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam5(double)));
    connect(customCommand->param6SpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam6(double)));
lm's avatar
lm committed
102
    connect(customCommand->param7SpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam7(double)));
pixhawk's avatar
pixhawk committed
103 104
}

pixhawk's avatar
pixhawk committed
105 106 107 108 109 110 111 112 113 114
void WaypointView::moveUp()
{
    emit moveUpWaypoint(wp);
}

void WaypointView::moveDown()
{
    emit moveDownWaypoint(wp);
}

Alejandro's avatar
Alejandro committed
115

pixhawk's avatar
pixhawk committed
116 117 118
void WaypointView::remove()
{
    emit removeWaypoint(wp);
119
    deleteLater();
pixhawk's avatar
pixhawk committed
120 121
}

pixhawk's avatar
pixhawk committed
122
void WaypointView::changedAutoContinue(int state)
pixhawk's avatar
pixhawk committed
123 124
{
    if (state == 0)
125
        wp->setAutocontinue(false);
pixhawk's avatar
pixhawk committed
126
    else
127
        wp->setAutocontinue(true);
pixhawk's avatar
pixhawk committed
128 129
}

130
void WaypointView::updateActionView(int action)
131
{
132 133
    // Remove stretch item at index 17 (m_ui->removeSpacer)
    m_ui->horizontalLayout->takeAt(17);
134
    // expose ui based on action
135

136
    switch(action) {
137
    case MAV_CMD_NAV_TAKEOFF:
138 139 140 141 142 143 144
        m_ui->orbitSpinBox->hide();
        m_ui->yawSpinBox->hide();
        m_ui->turnsSpinBox->hide();
        m_ui->autoContinue->hide();
        m_ui->holdTimeSpinBox->hide();
        m_ui->acceptanceSpinBox->hide();
        m_ui->customActionWidget->hide();
145
        m_ui->horizontalLayout->insertStretch(17, 82);
146 147
        m_ui->takeOffAngleSpinBox->show();
        break;
148
    case MAV_CMD_NAV_LAND:
149 150 151 152 153 154 155 156
        m_ui->orbitSpinBox->hide();
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->yawSpinBox->hide();
        m_ui->turnsSpinBox->hide();
        m_ui->autoContinue->hide();
        m_ui->holdTimeSpinBox->hide();
        m_ui->acceptanceSpinBox->hide();
        m_ui->customActionWidget->hide();
157
        m_ui->horizontalLayout->insertStretch(17, 26);
158
        break;
159
    case MAV_CMD_NAV_RETURN_TO_LAUNCH:
160 161 162 163 164 165 166 167
        m_ui->orbitSpinBox->hide();
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->yawSpinBox->hide();
        m_ui->turnsSpinBox->hide();
        m_ui->autoContinue->hide();
        m_ui->holdTimeSpinBox->hide();
        m_ui->acceptanceSpinBox->hide();
        m_ui->customActionWidget->hide();
168
        m_ui->horizontalLayout->insertStretch(17, 26);
169
        break;
170
    case MAV_CMD_NAV_WAYPOINT:
171 172 173
        m_ui->orbitSpinBox->hide();
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->turnsSpinBox->hide();
lm's avatar
lm committed
174
        m_ui->holdTimeSpinBox->show();
175
        m_ui->customActionWidget->hide();
176
        m_ui->horizontalLayout->insertStretch(17, 1);
177

178
        m_ui->autoContinue->show();
179 180
        m_ui->acceptanceSpinBox->show();
        m_ui->yawSpinBox->show();
181
        break;
182
    case MAV_CMD_NAV_LOITER_UNLIM:
183 184 185 186 187 188 189
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->yawSpinBox->hide();
        m_ui->turnsSpinBox->hide();
        m_ui->autoContinue->hide();
        m_ui->holdTimeSpinBox->hide();
        m_ui->acceptanceSpinBox->hide();
        m_ui->customActionWidget->hide();
190
        m_ui->horizontalLayout->insertStretch(17, 25);
191 192
        m_ui->orbitSpinBox->show();
        break;
193
    case MAV_CMD_NAV_LOITER_TURNS:
194 195 196 197 198 199
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->yawSpinBox->hide();
        m_ui->autoContinue->hide();
        m_ui->holdTimeSpinBox->hide();
        m_ui->acceptanceSpinBox->hide();
        m_ui->customActionWidget->hide();
200
        m_ui->horizontalLayout->insertStretch(17, 20);
201 202 203
        m_ui->orbitSpinBox->show();
        m_ui->turnsSpinBox->show();
        break;
204
    case MAV_CMD_NAV_LOITER_TIME:
205 206 207 208 209 210
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->yawSpinBox->hide();
        m_ui->turnsSpinBox->hide();
        m_ui->autoContinue->hide();
        m_ui->acceptanceSpinBox->hide();
        m_ui->customActionWidget->hide();
211
        m_ui->horizontalLayout->insertStretch(17, 20);
212 213 214
        m_ui->orbitSpinBox->show();
        m_ui->holdTimeSpinBox->show();
        break;
LM's avatar
LM committed
215 216 217 218 219 220 221 222 223 224 225
//    case MAV_CMD_NAV_ORIENTATION_TARGET:
//        m_ui->orbitSpinBox->hide();
//        m_ui->takeOffAngleSpinBox->hide();
//        m_ui->turnsSpinBox->hide();
//        m_ui->holdTimeSpinBox->show();
//        m_ui->customActionWidget->hide();

//        m_ui->autoContinue->show();
//        m_ui->acceptanceSpinBox->hide();
//        m_ui->yawSpinBox->hide();
//        break;
226
    default:
227
        break;
228 229 230
    }
}

231 232 233 234
/**
 * @param index The index of the combo box of the action entry, NOT the action ID
 */
void WaypointView::changedAction(int index)
235 236
{
    // set waypoint action
237
    int actionIndex = m_ui->comboBox_action->itemData(index).toUInt();
238
    if (actionIndex < MAV_CMD_ENUM_END && actionIndex >= 0) {
239
        MAV_CMD action = (MAV_CMD) actionIndex;
240 241 242 243 244 245 246
        wp->setAction(action);
    }

    // Expose ui based on action
    // Change to mission frame
    // if action is unknown

247
    switch(actionIndex) {
248 249 250 251 252 253 254
    case MAV_CMD_NAV_TAKEOFF:
    case MAV_CMD_NAV_LAND:
    case MAV_CMD_NAV_RETURN_TO_LAUNCH:
    case MAV_CMD_NAV_WAYPOINT:
    case MAV_CMD_NAV_LOITER_UNLIM:
    case MAV_CMD_NAV_LOITER_TURNS:
    case MAV_CMD_NAV_LOITER_TIME:
255 256 257
        changeViewMode(QGC_WAYPOINTVIEW_MODE_NAV);
        // Update frame view
        updateFrameView(m_ui->comboBox_frame->currentIndex());
258 259
        // Update view
        updateActionView(actionIndex);
260
        break;
261
    case MAV_CMD_ENUM_END:
262 263
    default:
        // Switch to mission frame
264
        changeViewMode(QGC_WAYPOINTVIEW_MODE_DIRECT_EDITING);
265 266 267
        break;
    }
}
268

269
void WaypointView::changeViewMode(QGC_WAYPOINTVIEW_MODE mode)
270
{
lm's avatar
lm committed
271
    viewMode = mode;
272
    switch (mode) {
273
    case QGC_WAYPOINTVIEW_MODE_NAV:
274 275 276 277
    case QGC_WAYPOINTVIEW_MODE_CONDITION:
        // Hide everything, show condition widget
        // TODO
    case QGC_WAYPOINTVIEW_MODE_DO:
278

279
        break;
280
    case QGC_WAYPOINTVIEW_MODE_DIRECT_EDITING:
281 282 283 284 285 286 287 288 289 290 291 292 293 294
        // Hide almost everything
        m_ui->orbitSpinBox->hide();
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->yawSpinBox->hide();
        m_ui->turnsSpinBox->hide();
        m_ui->holdTimeSpinBox->hide();
        m_ui->acceptanceSpinBox->hide();
        m_ui->posDSpinBox->hide();
        m_ui->posESpinBox->hide();
        m_ui->posNSpinBox->hide();
        m_ui->latSpinBox->hide();
        m_ui->lonSpinBox->hide();
        m_ui->altSpinBox->hide();

lm's avatar
lm committed
295 296 297
        int action_index = m_ui->comboBox_action->findData(MAV_CMD_ENUM_END);
        m_ui->comboBox_action->setCurrentIndex(action_index);

298
        // Show action widget
299
        if (!m_ui->customActionWidget->isVisible()) {
300 301
            m_ui->customActionWidget->show();
        }
302
        if (!m_ui->autoContinue->isVisible()) {
303 304
            m_ui->autoContinue->show();
        }
305
        break;
306
    }
lm's avatar
lm committed
307

308 309 310 311
}

void WaypointView::updateFrameView(int frame)
{
312
    switch(frame) {
313
    case MAV_FRAME_GLOBAL:
314
    case MAV_FRAME_GLOBAL_RELATIVE_ALT:
315 316 317 318 319 320 321 322 323 324
        m_ui->posNSpinBox->hide();
        m_ui->posESpinBox->hide();
        m_ui->posDSpinBox->hide();
        m_ui->lonSpinBox->show();
        m_ui->latSpinBox->show();
        m_ui->altSpinBox->show();
        // Coordinate frame
        m_ui->comboBox_frame->show();
        m_ui->customActionWidget->hide();
        break;
325
    case MAV_FRAME_LOCAL_NED:
326 327 328 329 330 331 332 333 334 335
        m_ui->lonSpinBox->hide();
        m_ui->latSpinBox->hide();
        m_ui->altSpinBox->hide();
        m_ui->posNSpinBox->show();
        m_ui->posESpinBox->show();
        m_ui->posDSpinBox->show();
        // Coordinate frame
        m_ui->comboBox_frame->show();
        m_ui->customActionWidget->hide();
        break;
336 337 338 339 340
    default:
        std::cerr << "unknown frame" << std::endl;
    }
}

pixhawk's avatar
pixhawk committed
341 342
void WaypointView::deleted(QObject* waypoint)
{
343
    Q_UNUSED(waypoint);
lm's avatar
lm committed
344 345 346 347
//    if (waypoint == this->wp)
//    {
//        deleteLater();
//    }
pixhawk's avatar
pixhawk committed
348 349
}

350 351 352 353 354 355 356 357 358
void WaypointView::changedFrame(int index)
{
    // set waypoint action
    MAV_FRAME frame = (MAV_FRAME)m_ui->comboBox_frame->itemData(index).toUInt();
    wp->setFrame(frame);

    updateFrameView(frame);
}

pixhawk's avatar
pixhawk committed
359
void WaypointView::changedCurrent(int state)
pixhawk's avatar
pixhawk committed
360
{
361
    if (state == 0) {
pixhawk's avatar
pixhawk committed
362 363 364
        m_ui->selectedBox->setChecked(true);
        m_ui->selectedBox->setCheckState(Qt::Checked);
        wp->setCurrent(false);
365
    } else {
pixhawk's avatar
pixhawk committed
366
        wp->setCurrent(true);
367
        emit changeCurrentWaypoint(wp->getId());   //the slot changeCurrentWaypoint() in WaypointList sets all other current flags to false
pixhawk's avatar
pixhawk committed
368
    }
pixhawk's avatar
pixhawk committed
369 370
}

371 372
void WaypointView::updateValues()
{
pixhawk's avatar
pixhawk committed
373 374
    // Check if we just lost the wp, delete the widget
    // accordingly
375
    if (!wp) {
pixhawk's avatar
pixhawk committed
376 377 378
        deleteLater();
        return;
    }
379 380
    // Deactivate signals from the WP
    wp->blockSignals(true);
381 382
    // update frame
    MAV_FRAME frame = wp->getFrame();
383
    int frame_index = m_ui->comboBox_frame->findData(frame);
384
    if (m_ui->comboBox_frame->currentIndex() != frame_index) {
385
        m_ui->comboBox_frame->setCurrentIndex(frame_index);
386
        updateFrameView(frame);
387
    }
388
    switch(frame) {
389
    case MAV_FRAME_LOCAL_NED: {
390 391
        if (m_ui->posNSpinBox->value() != wp->getX()) {
            m_ui->posNSpinBox->setValue(wp->getX());
pixhawk's avatar
pixhawk committed
392
        }
393 394 395 396 397 398 399 400
        if (m_ui->posESpinBox->value() != wp->getY()) {
            m_ui->posESpinBox->setValue(wp->getY());
        }
        if (m_ui->posDSpinBox->value() != wp->getZ()) {
            m_ui->posDSpinBox->setValue(wp->getZ());
        }
    }
    break;
401
    case MAV_FRAME_GLOBAL:
402
    case MAV_FRAME_GLOBAL_RELATIVE_ALT: {
403 404 405 406 407 408
        if (m_ui->latSpinBox->value() != wp->getLatitude()) {
            // Rounding might occur, prevent spin box from
            // firing back changes
            m_ui->latSpinBox->blockSignals(true);
            m_ui->latSpinBox->setValue(wp->getLatitude());
            m_ui->latSpinBox->blockSignals(false);
pixhawk's avatar
pixhawk committed
409
        }
410 411 412 413 414 415
        if (m_ui->lonSpinBox->value() != wp->getLongitude()) {
            // Rounding might occur, prevent spin box from
            // firing back changes
            m_ui->lonSpinBox->blockSignals(true);
            m_ui->lonSpinBox->setValue(wp->getLongitude());
            m_ui->lonSpinBox->blockSignals(false);
416
        }
417 418 419 420 421 422
        if (m_ui->altSpinBox->value() != wp->getAltitude()) {
            // Rounding might occur, prevent spin box from
            // firing back changes
            m_ui->altSpinBox->blockSignals(true);
            m_ui->altSpinBox->setValue(wp->getAltitude());
            m_ui->altSpinBox->blockSignals(false);
423 424 425
        }
    }
    break;
426 427
    default:
        // Do nothing
428
        break;
429 430
    }

431
    // Update action
432
    MAV_CMD action = wp->getAction();
433
    int action_index = m_ui->comboBox_action->findData(action);
434
    // Set to "Other" action if it was -1
435
    if (action_index == -1) {
436
        action_index = m_ui->comboBox_action->findData(MAV_CMD_ENUM_END);
437 438
    }
    // Only update if changed
439
    if (m_ui->comboBox_action->currentIndex() != action_index) {
440
        // If action is unknown, set direct editing mode
441
        if (wp->getAction() < 0 || wp->getAction() > MAV_CMD_NAV_TAKEOFF) {
442
            changeViewMode(QGC_WAYPOINTVIEW_MODE_DIRECT_EDITING);
443 444
        } else {
            if (viewMode != QGC_WAYPOINTVIEW_MODE_DIRECT_EDITING) {
lm's avatar
lm committed
445 446 447 448
                // Action ID known, update
                m_ui->comboBox_action->setCurrentIndex(action_index);
                updateActionView(action);
            }
449
        }
pixhawk's avatar
pixhawk committed
450
    }
451 452 453 454 455 456 457 458 459 460 461 462 463
    // Do something on actions - currently unused
//    switch(action) {
//    case MAV_CMD_NAV_TAKEOFF:
//        break;
//    case MAV_CMD_NAV_LAND:
//        break;
//    case MAV_CMD_NAV_WAYPOINT:
//        break;
//    case MAV_CMD_NAV_LOITER_UNLIM:
//        break;
//    default:
//        std::cerr << "unknown action" << std::endl;
//    }
464

465
    if (m_ui->yawSpinBox->value() != wp->getYaw()) {
lm's avatar
lm committed
466
        if (!m_ui->yawSpinBox->isVisible()) m_ui->yawSpinBox->blockSignals(true);
lm's avatar
lm committed
467
        m_ui->yawSpinBox->setValue(wp->getYaw());
lm's avatar
lm committed
468
        if (!m_ui->yawSpinBox->isVisible()) m_ui->yawSpinBox->blockSignals(false);
pixhawk's avatar
pixhawk committed
469
    }
470
    if (m_ui->selectedBox->isChecked() != wp->getCurrent()) {
pixhawk's avatar
pixhawk committed
471 472
        m_ui->selectedBox->setChecked(wp->getCurrent());
    }
473
    if (m_ui->autoContinue->isChecked() != wp->getAutoContinue()) {
pixhawk's avatar
pixhawk committed
474 475
        m_ui->autoContinue->setChecked(wp->getAutoContinue());
    }
pixhawk's avatar
pixhawk committed
476
    m_ui->idLabel->setText(QString("%1").arg(wp->getId()));
477
    if (m_ui->orbitSpinBox->value() != wp->getLoiterOrbit()) {
lm's avatar
lm committed
478
        if (!m_ui->orbitSpinBox->isVisible()) m_ui->orbitSpinBox->blockSignals(true);
479
        m_ui->orbitSpinBox->setValue(wp->getLoiterOrbit());
lm's avatar
lm committed
480
        if (!m_ui->orbitSpinBox->isVisible()) m_ui->orbitSpinBox->blockSignals(false);
481
    }
482
    if (m_ui->acceptanceSpinBox->value() != wp->getAcceptanceRadius()) {
lm's avatar
lm committed
483
        if (!m_ui->acceptanceSpinBox->isVisible()) m_ui->acceptanceSpinBox->blockSignals(true);
484
        m_ui->acceptanceSpinBox->setValue(wp->getAcceptanceRadius());
lm's avatar
lm committed
485
        if (!m_ui->acceptanceSpinBox->isVisible()) m_ui->acceptanceSpinBox->blockSignals(false);
pixhawk's avatar
pixhawk committed
486
    }
487
    if (m_ui->holdTimeSpinBox->value() != wp->getHoldTime()) {
lm's avatar
lm committed
488
        if (!m_ui->holdTimeSpinBox->isVisible()) m_ui->holdTimeSpinBox->blockSignals(true);
pixhawk's avatar
pixhawk committed
489
        m_ui->holdTimeSpinBox->setValue(wp->getHoldTime());
lm's avatar
lm committed
490
        if (!m_ui->holdTimeSpinBox->isVisible()) m_ui->holdTimeSpinBox->blockSignals(false);
pixhawk's avatar
pixhawk committed
491
    }
492
    if (m_ui->turnsSpinBox->value() != wp->getTurns()) {
lm's avatar
lm committed
493
        if (!m_ui->turnsSpinBox->isVisible()) m_ui->turnsSpinBox->blockSignals(true);
494
        m_ui->turnsSpinBox->setValue(wp->getTurns());
lm's avatar
lm committed
495
        if (!m_ui->turnsSpinBox->isVisible()) m_ui->turnsSpinBox->blockSignals(false);
496
    }
497
    if (m_ui->takeOffAngleSpinBox->value() != wp->getParam1()) {
lm's avatar
lm committed
498
        if (!m_ui->takeOffAngleSpinBox->isVisible()) m_ui->takeOffAngleSpinBox->blockSignals(true);
499
        m_ui->takeOffAngleSpinBox->setValue(wp->getParam1());
lm's avatar
lm committed
500
        if (!m_ui->takeOffAngleSpinBox->isVisible()) m_ui->takeOffAngleSpinBox->blockSignals(false);
501
    }
502 503 504

    // UPDATE CUSTOM ACTION WIDGET

505
    if (customCommand->commandSpinBox->value() != wp->getAction()) {
506
        customCommand->commandSpinBox->setValue(wp->getAction());
507
        // qDebug() << "Changed action";
508 509
    }
    // Param 1
510
    if (customCommand->param1SpinBox->value() != wp->getParam1()) {
511 512 513
        customCommand->param1SpinBox->setValue(wp->getParam1());
    }
    // Param 2
514
    if (customCommand->param2SpinBox->value() != wp->getParam2()) {
515 516 517
        customCommand->param2SpinBox->setValue(wp->getParam2());
    }
    // Param 3
518
    if (customCommand->param3SpinBox->value() != wp->getParam3()) {
519 520 521
        customCommand->param3SpinBox->setValue(wp->getParam3());
    }
    // Param 4
522
    if (customCommand->param4SpinBox->value() != wp->getParam4()) {
523 524
        customCommand->param4SpinBox->setValue(wp->getParam4());
    }
525
    // Param 5
526
    if (customCommand->param5SpinBox->value() != wp->getParam5()) {
527 528 529
        customCommand->param5SpinBox->setValue(wp->getParam5());
    }
    // Param 6
530
    if (customCommand->param6SpinBox->value() != wp->getParam6()) {
531 532
        customCommand->param6SpinBox->setValue(wp->getParam6());
    }
lm's avatar
lm committed
533
    // Param 7
534
    if (customCommand->param7SpinBox->value() != wp->getParam7()) {
lm's avatar
lm committed
535 536
        customCommand->param7SpinBox->setValue(wp->getParam7());
    }
537

538
    wp->blockSignals(false);
539 540 541 542 543 544 545 546 547

    QColor backGroundColor = QGC::colorBackground;

    static int lastId = -1;
    int currId = wp->getId() % 2;

    if (currId != lastId)
    {

548
        // qDebug() << "COLOR ID: " << currId;
549 550 551 552 553 554 555 556 557
        if (currId == 1)
        {
            //backGroundColor = backGroundColor.lighter(150);
            backGroundColor = QColor("#252528").lighter(150);
        }
        else
        {
            backGroundColor = QColor("#252528").lighter(250);
        }
558
        // qDebug() << "COLOR:" << backGroundColor.name();
559 560 561 562 563 564 565 566 567 568 569 570

        // Update color based on id
        QString groupBoxStyle = QString("QGroupBox {padding: 0px; margin: 0px; border: 0px; background-color: %1; }").arg(backGroundColor.name());
        QString labelStyle = QString("QWidget {background-color: %1; color: #DDDDDF; border-color: #EEEEEE; }").arg(backGroundColor.name());
        QString checkBoxStyle = QString("QCheckBox {background-color: %1; color: #454545; border-color: #EEEEEE; }").arg(backGroundColor.name());

        m_ui->autoContinue->setStyleSheet(checkBoxStyle);
        m_ui->selectedBox->setStyleSheet(checkBoxStyle);
        m_ui->idLabel->setStyleSheet(labelStyle);
        m_ui->groupBox->setStyleSheet(groupBoxStyle);
        lastId = currId;
    }
571 572
}

pixhawk's avatar
pixhawk committed
573
void WaypointView::setCurrent(bool state)
pixhawk's avatar
pixhawk committed
574
{
575
    m_ui->selectedBox->blockSignals(true);
576
    m_ui->selectedBox->setChecked(state);
577
    m_ui->selectedBox->blockSignals(false);
pixhawk's avatar
pixhawk committed
578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594
}

WaypointView::~WaypointView()
{
    delete m_ui;
}

void WaypointView::changeEvent(QEvent *e)
{
    switch (e->type()) {
    case QEvent::LanguageChange:
        m_ui->retranslateUi(this);
        break;
    default:
        break;
    }
}