WaypointEditableView.cc 21.4 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

20 21
#include "WaypointEditableView.h"
#include "ui_WaypointEditableView.h"
22

23
#include "MainWindow.h"
24 25 26 27 28 29 30 31 32 33 34 35 36
#include "mission/QGCMissionNavWaypoint.h"
#include "mission/QGCMissionNavLoiterUnlim.h"
#include "mission/QGCMissionNavLoiterTurns.h"
#include "mission/QGCMissionNavLoiterTime.h"
#include "mission/QGCMissionNavReturnToLaunch.h"
#include "mission/QGCMissionNavLand.h"
#include "mission/QGCMissionNavTakeoff.h"
#include "mission/QGCMissionNavSweep.h"
#include "mission/QGCMissionConditionDelay.h"
#include "mission/QGCMissionDoJump.h"
#include "mission/QGCMissionDoStartSearch.h"
#include "mission/QGCMissionDoFinishSearch.h"
#include "mission/QGCMissionOther.h"
pixhawk's avatar
pixhawk committed
37

pixhawk's avatar
pixhawk committed
38

39
WaypointEditableView::WaypointEditableView(Waypoint* wp, QWidget* parent) :
40
    QWidget(parent),
41
    wp(wp),
Lorenz Meier's avatar
Lorenz Meier committed
42
    viewMode(QGC_WAYPOINTEDITABLEVIEW_MODE_DEFAULT),
43
    m_ui(new Ui::WaypointEditableView)
pixhawk's avatar
pixhawk committed
44 45
{
    m_ui->setupUi(this);
pixhawk's avatar
pixhawk committed
46
    connect(wp, SIGNAL(destroyed(QObject*)), this, SLOT(deleted(QObject*)));
47

48
    // CUSTOM COMMAND WIDGET
pixhawk's avatar
pixhawk committed
49
    QHBoxLayout *layout = new QHBoxLayout;
50
    layout->setSpacing(2);
51
    layout->setContentsMargins(4, 0 ,4 ,0);
52
    m_ui->customActionWidget->setLayout(layout);
pixhawk's avatar
pixhawk committed
53

54
    MissionNavWaypointWidget = NULL;
55 56 57
    MissionNavLoiterUnlimWidget = NULL;
    MissionNavLoiterTurnsWidget = NULL;
    MissionNavLoiterTimeWidget = NULL;
58 59 60
    MissionNavReturnToLaunchWidget = NULL;
    MissionNavLandWidget = NULL;
    MissionNavTakeoffWidget = NULL;
61
    MissionNavSweepWidget = NULL;
62
    MissionConditionDelayWidget = NULL;
63
    MissionDoJumpWidget = NULL;
64 65
    MissionDoStartSearchWidget = NULL;
    MissionDoFinishSearchWidget = NULL;
66
    MissionOtherWidget = NULL;
67 68


69
    // add actions
70 71 72 73 74 75 76
    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);
77
    //m_ui->comboBox_action->addItem(tr("NAV: Target"),MAV_CMD_NAV_TARGET);
pixhawk's avatar
pixhawk committed
78
    m_ui->comboBox_action->addItem(tr("IF: Delay over"),MAV_CMD_CONDITION_DELAY);
lm's avatar
lm committed
79
    //m_ui->comboBox_action->addItem(tr("IF: Yaw angle is"),MAV_CMD_CONDITION_YAW);
80
    m_ui->comboBox_action->addItem(tr("DO: Jump to Index"),MAV_CMD_DO_JUMP);
81 82
#ifdef MAVLINK_ENABLED_PIXHAWK
    m_ui->comboBox_action->addItem(tr("NAV: Sweep"),MAV_CMD_NAV_SWEEP);
83 84
    m_ui->comboBox_action->addItem(tr("Do: Start Search"),MAV_CMD_DO_START_SEARCH);
    m_ui->comboBox_action->addItem(tr("Do: Finish Search"),MAV_CMD_DO_FINISH_SEARCH);
85
#endif
86
    m_ui->comboBox_action->addItem(tr("Other"), MAV_CMD_ENUM_END);
87

88
    // add frames
89 90 91
    m_ui->comboBox_frame->addItem("Global/Abs. Alt",MAV_FRAME_GLOBAL);
    m_ui->comboBox_frame->addItem("Global/Rel. Alt", MAV_FRAME_GLOBAL_RELATIVE_ALT);
    m_ui->comboBox_frame->addItem("Local(NED)",MAV_FRAME_LOCAL_NED);
92 93
    m_ui->comboBox_frame->addItem("Mission",MAV_FRAME_MISSION);

94 95 96 97 98
    // We do not want users to mess with the current waypoint in missions -
    // they have to use the one downloaded from the MAV to change the current WP.
    m_ui->selectedBox->setVisible(false);
    connect(m_ui->selectedBox, SIGNAL(stateChanged(int)), this, SLOT(changedCurrent(int)));

99
    // Initialize view correctly
100 101
    int actionID = wp->getAction();
    initializeActionView(actionID);
102
    updateValues();
103
    updateActionView(actionID);
pixhawk's avatar
pixhawk committed
104

105
    // Check for mission frame
106 107
    if (wp->getFrame() == MAV_FRAME_MISSION)
    {
108 109 110
        m_ui->comboBox_action->setCurrentIndex(m_ui->comboBox_action->count()-1);
    }

pixhawk's avatar
pixhawk committed
111 112 113 114
    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
115
    connect(m_ui->autoContinue, SIGNAL(stateChanged(int)), this, SLOT(changedAutoContinue(int)));
116 117
    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
118

pixhawk's avatar
pixhawk committed
119 120
}

121
void WaypointEditableView::moveUp()
pixhawk's avatar
pixhawk committed
122 123 124 125
{
    emit moveUpWaypoint(wp);
}

126
void WaypointEditableView::moveDown()
pixhawk's avatar
pixhawk committed
127 128 129 130
{
    emit moveDownWaypoint(wp);
}

Alejandro's avatar
Alejandro committed
131

132
void WaypointEditableView::remove()
pixhawk's avatar
pixhawk committed
133 134
{
    emit removeWaypoint(wp);
135
    deleteLater();
pixhawk's avatar
pixhawk committed
136 137
}

138
void WaypointEditableView::changedAutoContinue(int state)
pixhawk's avatar
pixhawk committed
139 140
{
    if (state == 0)
141
        wp->setAutocontinue(false);
pixhawk's avatar
pixhawk committed
142
    else
143
        wp->setAutocontinue(true);
pixhawk's avatar
pixhawk committed
144 145
}

146
void WaypointEditableView::updateActionView(int action)
147
{
148 149
    //Hide all
    if(MissionNavWaypointWidget) MissionNavWaypointWidget->hide();
150 151 152
    if(MissionNavLoiterUnlimWidget) MissionNavLoiterUnlimWidget->hide();
    if(MissionNavLoiterTurnsWidget) MissionNavLoiterTurnsWidget->hide();
    if(MissionNavLoiterTimeWidget) MissionNavLoiterTimeWidget->hide();
153 154 155
    if(MissionNavReturnToLaunchWidget) MissionNavReturnToLaunchWidget->hide();
    if(MissionNavLandWidget) MissionNavLandWidget->hide();
    if(MissionNavTakeoffWidget) MissionNavTakeoffWidget->hide();
156
    if(MissionNavSweepWidget) MissionNavSweepWidget->hide();
157 158
    if(MissionConditionDelayWidget) MissionConditionDelayWidget->hide();
    if(MissionDoJumpWidget) MissionDoJumpWidget->hide();
159 160
    if(MissionDoStartSearchWidget) MissionDoStartSearchWidget->hide();
    if(MissionDoFinishSearchWidget) MissionDoFinishSearchWidget->hide();
161
    if(MissionOtherWidget) MissionOtherWidget->hide();
162 163 164 165 166

    //Show only the correct one
    if (viewMode != QGC_WAYPOINTEDITABLEVIEW_MODE_DIRECT_EDITING)
    {
        switch(action) {
167 168 169
        case MAV_CMD_NAV_WAYPOINT:
            if(MissionNavWaypointWidget) MissionNavWaypointWidget->show();
            break;
170
        case MAV_CMD_NAV_LOITER_UNLIM:
171 172
            if(MissionNavLoiterUnlimWidget) MissionNavLoiterUnlimWidget->show();
            break;
173
        case MAV_CMD_NAV_LOITER_TURNS:
174 175
            if(MissionNavLoiterTurnsWidget) MissionNavLoiterTurnsWidget->show();
            break;
176
        case MAV_CMD_NAV_LOITER_TIME:
177
            if(MissionNavLoiterTimeWidget) MissionNavLoiterTimeWidget->show();
178
            break;
179
        case MAV_CMD_NAV_RETURN_TO_LAUNCH:
180 181
            if(MissionNavReturnToLaunchWidget) MissionNavReturnToLaunchWidget->show();
            break;
182
        case MAV_CMD_NAV_LAND:
183 184
            if(MissionNavLandWidget) MissionNavLandWidget->show();
            break;
185
        case MAV_CMD_NAV_TAKEOFF:
186 187
            if(MissionNavTakeoffWidget) MissionNavTakeoffWidget->show();
            break;
188 189
        case MAV_CMD_CONDITION_DELAY:
            if(MissionConditionDelayWidget) MissionConditionDelayWidget->show();
190 191 192 193
            break;
        case MAV_CMD_DO_JUMP:
            if(MissionDoJumpWidget) MissionDoJumpWidget->show();
            break;
194 195 196 197
        #ifdef MAVLINK_ENABLED_PIXHAWK
        case MAV_CMD_NAV_SWEEP:
            if(MissionNavSweepWidget) MissionNavSweepWidget->show();
            break;
198 199 200 201 202 203
        case MAV_CMD_DO_START_SEARCH:
            if(MissionDoStartSearchWidget) MissionDoStartSearchWidget->show();
            break;
        case MAV_CMD_DO_FINISH_SEARCH:
            if(MissionDoFinishSearchWidget) MissionDoFinishSearchWidget->show();
            break;
204 205
        #endif

206 207
        default:
            if(MissionOtherWidget) MissionOtherWidget->show();
208
            viewMode = QGC_WAYPOINTEDITABLEVIEW_MODE_DIRECT_EDITING;
209 210 211 212 213 214
            break;
        }
    }
    else
    {
        if(MissionOtherWidget) MissionOtherWidget->show();
215 216 217
    }
}

218 219 220
/**
 * @param index The index of the combo box of the action entry, NOT the action ID
 */
221
void WaypointEditableView::changedAction(int index)
222 223
{
    // set waypoint action
224 225 226 227 228 229 230 231 232
    int actionID = m_ui->comboBox_action->itemData(index).toUInt();
    if (actionID == QVariant::Invalid || actionID == MAV_CMD_ENUM_END)
    {
        viewMode = QGC_WAYPOINTEDITABLEVIEW_MODE_DIRECT_EDITING;
    }
    else //(actionID < MAV_CMD_ENUM_END && actionID >= 0)
    {
        viewMode = QGC_WAYPOINTEDITABLEVIEW_MODE_DEFAULT;
        MAV_CMD action = (MAV_CMD) actionID;
233 234
        wp->setAction(action);
    }
235 236 237 238 239
    // change the view
    initializeActionView(actionID);
    updateValues();
    updateActionView(actionID);
}
240

241 242 243 244
void WaypointEditableView::initializeActionView(int actionID)
{
    //initialize a new action-widget, if needed.
    switch(actionID) {
245 246 247 248 249
    case MAV_CMD_NAV_WAYPOINT:
        if (!MissionNavWaypointWidget)
        {
            MissionNavWaypointWidget = new QGCMissionNavWaypoint(this);
            m_ui->customActionWidget->layout()->addWidget(MissionNavWaypointWidget);
250
        }
251
        break;
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
    case MAV_CMD_NAV_LOITER_UNLIM:
        if (!MissionNavLoiterUnlimWidget)
        {
            MissionNavLoiterUnlimWidget = new QGCMissionNavLoiterUnlim(this);
            m_ui->customActionWidget->layout()->addWidget(MissionNavLoiterUnlimWidget);
        }
        break;
    case MAV_CMD_NAV_LOITER_TURNS:
        if (!MissionNavLoiterTurnsWidget)
        {
            MissionNavLoiterTurnsWidget = new QGCMissionNavLoiterTurns(this);
            m_ui->customActionWidget->layout()->addWidget(MissionNavLoiterTurnsWidget);
        }
        break;
    case MAV_CMD_NAV_LOITER_TIME:
        if (!MissionNavLoiterTimeWidget)
        {
            MissionNavLoiterTimeWidget = new QGCMissionNavLoiterTime(this);
            m_ui->customActionWidget->layout()->addWidget(MissionNavLoiterTimeWidget);
        }
        break;
    case MAV_CMD_NAV_RETURN_TO_LAUNCH:
274 275 276 277 278 279
        if (!MissionNavReturnToLaunchWidget)
        {
            MissionNavReturnToLaunchWidget = new QGCMissionNavReturnToLaunch(this);
            m_ui->customActionWidget->layout()->addWidget(MissionNavReturnToLaunchWidget);
        }
        break;
280
    case MAV_CMD_NAV_LAND:
281 282 283 284 285 286
        if (!MissionNavLandWidget)
        {
            MissionNavLandWidget = new QGCMissionNavLand(this);
            m_ui->customActionWidget->layout()->addWidget(MissionNavLandWidget);
        }
        break;
287
    case MAV_CMD_NAV_TAKEOFF:
288 289 290 291 292 293
        if (!MissionNavTakeoffWidget)
        {
            MissionNavTakeoffWidget = new QGCMissionNavTakeoff(this);
            m_ui->customActionWidget->layout()->addWidget(MissionNavTakeoffWidget);
        }
        break;
294 295 296 297 298 299 300 301
    case MAV_CMD_CONDITION_DELAY:
        if (!MissionConditionDelayWidget)
        {
            MissionConditionDelayWidget = new QGCMissionConditionDelay(this);
            m_ui->customActionWidget->layout()->addWidget(MissionConditionDelayWidget);
        }
        break;
    case MAV_CMD_DO_JUMP:
302
        if (!MissionDoJumpWidget)
303
        {
304
            MissionDoJumpWidget = new QGCMissionDoJump(this);
305
            m_ui->customActionWidget->layout()->addWidget(MissionDoJumpWidget);
306
        }
307
        break;
308 309 310 311 312 313 314 315
 #ifdef MAVLINK_ENABLED_PIXHAWK
    case MAV_CMD_NAV_SWEEP:
        if (!MissionNavSweepWidget)
        {
            MissionNavSweepWidget = new QGCMissionNavSweep(this);
            m_ui->customActionWidget->layout()->addWidget(MissionNavSweepWidget);
        }
        break;
316 317 318 319 320 321 322 323 324 325 326 327 328 329
    case MAV_CMD_DO_START_SEARCH:
        if (!MissionDoStartSearchWidget)
        {
            MissionDoStartSearchWidget = new QGCMissionDoStartSearch(this);
            m_ui->customActionWidget->layout()->addWidget(MissionDoStartSearchWidget);
        }
        break;
    case MAV_CMD_DO_FINISH_SEARCH:
        if (!MissionDoFinishSearchWidget)
        {
            MissionDoFinishSearchWidget = new QGCMissionDoFinishSearch(this);
            m_ui->customActionWidget->layout()->addWidget(MissionDoFinishSearchWidget);
        }
        break;
330
#endif
331 332 333
    case MAV_CMD_ENUM_END:
    default:
        if (!MissionOtherWidget)
334
        {
335 336
            MissionOtherWidget = new QGCMissionOther(this);
            m_ui->customActionWidget->layout()->addWidget(MissionOtherWidget);
337
        }
338
        break;
339 340 341
    }
}

342
void WaypointEditableView::deleted(QObject* waypoint)
pixhawk's avatar
pixhawk committed
343
{
344
    Q_UNUSED(waypoint);
pixhawk's avatar
pixhawk committed
345 346
}

347
void WaypointEditableView::changedFrame(int index)
348 349 350 351 352 353
{
    // set waypoint action
    MAV_FRAME frame = (MAV_FRAME)m_ui->comboBox_frame->itemData(index).toUInt();
    wp->setFrame(frame);
}

354
void WaypointEditableView::changedCurrent(int state)
355
{
356 357 358
    if (state == 0)
    {
        if (wp->getCurrent() == true) //User clicked on the waypoint, that is already current
359
        {
360 361 362 363
            m_ui->selectedBox->setChecked(true);
            m_ui->selectedBox->setCheckState(Qt::Checked);
        }
        else
364
        {
365
            m_ui->selectedBox->setChecked(false);
366
            m_ui->selectedBox->setCheckState(Qt::Unchecked);
367 368 369
        }
    }
    else
370
    {
pixhawk's avatar
pixhawk committed
371
        wp->setCurrent(true);
372 373 374 375
        // At this point we do not consider this signal
        // to be valid / the edit check boxes should not change the view state
        //emit changeCurrentWaypoint(wp->getId());
        //the slot changeCurrentWaypoint() in WaypointList sets all other current flags to false
376
    }
pixhawk's avatar
pixhawk committed
377 378
}

379
void WaypointEditableView::updateValues()
380
{
pixhawk's avatar
pixhawk committed
381 382
    // Check if we just lost the wp, delete the widget
    // accordingly
383
    if (!wp) {
pixhawk's avatar
pixhawk committed
384 385 386
        deleteLater();
        return;
    }
387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428

    //wp->blockSignals(true);

    // Deactivate all QDoubleSpinBox signals due to
    // unwanted rounding effects
    for (int j = 0; j  < children().size(); ++j)
    {
        // Store only QGCToolWidgetItems
        QDoubleSpinBox* spin = dynamic_cast<QDoubleSpinBox*>(children().at(j));
        if (spin)
        {
            //qDebug() << "DEACTIVATED SPINBOX #" << j;
            spin->blockSignals(true);
        }
        else
        {
            // Store only QGCToolWidgetItems
            QWidget* item = dynamic_cast<QWidget*>(children().at(j));
            if (item)
            {
                //qDebug() << "FOUND WIDGET BOX";
                for (int k = 0; k  < item->children().size(); ++k)
                {
                    // Store only QGCToolWidgetItems
                    QDoubleSpinBox* spin = dynamic_cast<QDoubleSpinBox*>(item->children().at(k));
                    if (spin)
                    {
                        //qDebug() << "DEACTIVATED SPINBOX #" << k;
                        spin->blockSignals(true);
                    }
                }
            }
        }
    }

    // Block all custom action widget actions
    for (int j = 0; j  < m_ui->customActionWidget->children().size(); ++j)
    {
        // Store only QGCToolWidgetItems
        QDoubleSpinBox* spin = dynamic_cast<QDoubleSpinBox*>(m_ui->customActionWidget->children().at(j));
        if (spin)
        {
429
            //qDebug() << "DEACTIVATED SPINBOX #" << j;
430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
            spin->blockSignals(true);
        }
        else
        {
            // Store only QGCToolWidgetItems
            QWidget* item = dynamic_cast<QWidget*>(m_ui->customActionWidget->children().at(j));
            if (item)
            {
                //qDebug() << "CUSTOM ACTIONS FOUND WIDGET BOX";
                for (int k = 0; k  < item->children().size(); ++k)
                {
                    // Store only QGCToolWidgetItems
                    QDoubleSpinBox* spin = dynamic_cast<QDoubleSpinBox*>(item->children().at(k));
                    if (spin)
                    {
                        //qDebug() << "DEACTIVATED SPINBOX #" << k;
                        spin->blockSignals(true);
                    }
                }
            }
        }
    }


454 455
    // update frame
    MAV_FRAME frame = wp->getFrame();
456
    int frame_index = m_ui->comboBox_frame->findData(frame);
457
    if (m_ui->comboBox_frame->currentIndex() != frame_index) {
458
        m_ui->comboBox_frame->setCurrentIndex(frame_index);
459 460
    }

461
    // Update action
462
    MAV_CMD action = wp->getAction();
463
    int action_index = m_ui->comboBox_action->findData(action);
464 465
    if (m_ui->comboBox_action->currentIndex() != action_index)
    {
466
        if (viewMode != QGC_WAYPOINTEDITABLEVIEW_MODE_DIRECT_EDITING)
467
        {
468 469
            // Set to "Other" action if it was -1
            if (action_index == -1)
470
            {
471 472
                action_index = m_ui->comboBox_action->findData(MAV_CMD_ENUM_END);
                viewMode = QGC_WAYPOINTEDITABLEVIEW_MODE_DIRECT_EDITING;
lm's avatar
lm committed
473
            }
474
            m_ui->comboBox_action->setCurrentIndex(action_index);
475
        }
pixhawk's avatar
pixhawk committed
476
    }
477

478 479 480 481 482 483 484 485 486 487 488
    emit commandBroadcast(wp->getAction());
    emit frameBroadcast(wp->getFrame());
    emit param1Broadcast(wp->getParam1());
    emit param2Broadcast(wp->getParam2());
    emit param3Broadcast(wp->getParam3());
    emit param4Broadcast(wp->getParam4());
    emit param5Broadcast(wp->getParam5());
    emit param6Broadcast(wp->getParam6());
    emit param7Broadcast(wp->getParam7());


489 490
    if (m_ui->selectedBox->isChecked() != wp->getCurrent())
    {
491 492
        // This is never a reason to emit a changed signal
        m_ui->selectedBox->blockSignals(true);
pixhawk's avatar
pixhawk committed
493
        m_ui->selectedBox->setChecked(wp->getCurrent());
494
        m_ui->selectedBox->blockSignals(false);
pixhawk's avatar
pixhawk committed
495
    }
496 497
    if (m_ui->autoContinue->isChecked() != wp->getAutoContinue())
    {
pixhawk's avatar
pixhawk committed
498 499
        m_ui->autoContinue->setChecked(wp->getAutoContinue());
    }
500

501
    m_ui->idLabel->setText(QString::number(wp->getId()));
502

503
    // Style alternating rows of Missions as lighter/darker.
504 505 506 507 508 509
    static int lastId = -1;
    int currId = wp->getId() % 2;
    if (currId != lastId)
    {
        if (currId == 1)
        {
510
            this->setProperty("RowColoring", "odd");
511 512 513
        }
        else
        {
514
            this->setProperty("RowColoring", "even");
515 516 517
        }
        lastId = currId;
    }
518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582

    // Activate all QDoubleSpinBox signals due to
    // unwanted rounding effects
    for (int j = 0; j  < children().size(); ++j)
    {
        // Store only QGCToolWidgetItems
        QDoubleSpinBox* spin = dynamic_cast<QDoubleSpinBox*>(children().at(j));
        if (spin)
        {
            //qDebug() << "ACTIVATED SPINBOX #" << j;
            spin->blockSignals(false);
        }
        else
        {
            // Store only QGCToolWidgetItems
            QGroupBox* item = dynamic_cast<QGroupBox*>(children().at(j));
            if (item)
            {
                //qDebug() << "FOUND GROUP BOX";
                for (int k = 0; k  < item->children().size(); ++k)
                {
                    // Store only QGCToolWidgetItems
                    QDoubleSpinBox* spin = dynamic_cast<QDoubleSpinBox*>(item->children().at(k));
                    if (spin)
                    {
                        //qDebug() << "ACTIVATED SPINBOX #" << k;
                        spin->blockSignals(false);
                    }
                }
            }
        }
    }

    // Unblock all custom action widget actions
    for (int j = 0; j  < m_ui->customActionWidget->children().size(); ++j)
    {
        // Store only QGCToolWidgetItems
        QDoubleSpinBox* spin = dynamic_cast<QDoubleSpinBox*>(m_ui->customActionWidget->children().at(j));
        if (spin)
        {
            //qDebug() << "ACTIVATED SPINBOX #" << j;
            spin->blockSignals(false);
        }
        else
        {
            // Store only QGCToolWidgetItems
            QWidget* item = dynamic_cast<QWidget*>(m_ui->customActionWidget->children().at(j));
            if (item)
            {
                //qDebug() << "FOUND WIDGET BOX";
                for (int k = 0; k  < item->children().size(); ++k)
                {
                    // Store only QGCToolWidgetItems
                    QDoubleSpinBox* spin = dynamic_cast<QDoubleSpinBox*>(item->children().at(k));
                    if (spin)
                    {
                       //qDebug() << "ACTIVATED SPINBOX #" << k;
                        spin->blockSignals(false);
                    }
                }
            }
        }
    }

//    wp->blockSignals(false);
583 584
}

585
void WaypointEditableView::setCurrent(bool state)
pixhawk's avatar
pixhawk committed
586
{
587 588 589 590 591 592
    if (m_ui->selectedBox->isChecked() != state)
    {
        m_ui->selectedBox->blockSignals(true);
        m_ui->selectedBox->setChecked(state);
        m_ui->selectedBox->blockSignals(false);
    }
pixhawk's avatar
pixhawk committed
593 594
}

595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631

void WaypointEditableView::changedCommand(int mav_cmd_id)
{
    if (mav_cmd_id<MAV_CMD_ENUM_END)
    {
        wp->setAction(mav_cmd_id);
    }
}
void WaypointEditableView::changedParam1(double value)
{
    wp->setParam1(value);
}
void WaypointEditableView::changedParam2(double value)
{
    wp->setParam2(value);
}
void WaypointEditableView::changedParam3(double value)
{
    wp->setParam3(value);
}
void WaypointEditableView::changedParam4(double value)
{
    wp->setParam4(value);
}
void WaypointEditableView::changedParam5(double value)
{
    wp->setParam5(value);
}
void WaypointEditableView::changedParam6(double value)
{
    wp->setParam6(value);
}
void WaypointEditableView::changedParam7(double value)
{
    wp->setParam7(value);
}

632
WaypointEditableView::~WaypointEditableView()
pixhawk's avatar
pixhawk committed
633 634 635 636
{
    delete m_ui;
}

637
void WaypointEditableView::changeEvent(QEvent *e)
pixhawk's avatar
pixhawk committed
638 639 640 641 642 643 644 645 646
{
    switch (e->type()) {
    case QEvent::LanguageChange:
        m_ui->retranslateUi(this);
        break;
    default:
        break;
    }
}
647

648 649 650
/**
 * Implement paintEvent() so that stylesheets work for our custom widget.
 */
651 652 653 654 655 656 657
void WaypointEditableView::paintEvent(QPaintEvent *)
 {
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }