WaypointView.cc 16.6 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) :
pixhawk's avatar
pixhawk committed
25
        QWidget(parent),
26
        customCommand(new Ui_QGCCustomWaypointAction),
pixhawk's avatar
pixhawk committed
27
        m_ui(new Ui::WaypointView)
pixhawk's avatar
pixhawk committed
28 29 30 31
{
    m_ui->setupUi(this);

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

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

37
    // add actions
38 39 40 41 42 43 44
    m_ui->comboBox_action->addItem(tr("Navigate"),MAV_CMD_NAV_WAYPOINT);
    m_ui->comboBox_action->addItem(tr("TakeOff"),MAV_CMD_NAV_TAKEOFF);
    m_ui->comboBox_action->addItem(tr("Loiter Unlim."),MAV_CMD_NAV_LOITER_UNLIM);
    m_ui->comboBox_action->addItem(tr("Loiter Time"),MAV_CMD_NAV_LOITER_TIME);
    m_ui->comboBox_action->addItem(tr("Loiter Turns"),MAV_CMD_NAV_LOITER_TURNS);
    m_ui->comboBox_action->addItem(tr("Return to Launch"),MAV_CMD_NAV_RETURN_TO_LAUNCH);
    m_ui->comboBox_action->addItem(tr("Land"),MAV_CMD_NAV_LAND);
45
    m_ui->comboBox_action->addItem(tr("Other"), MAV_CMD_ENUM_END);
46 47 48 49 50
    //    m_ui->comboBox_action->addItem(tr("Delay"), MAV_ACTION_DELAY_BEFORE_COMMAND);
    //    m_ui->comboBox_action->addItem(tr("Ascend/Descent"), MAV_ACTION_ASCEND_AT_RATE);
    //    m_ui->comboBox_action->addItem(tr("Change Mode"), MAV_ACTION_CHANGE_MODE);
    //    m_ui->comboBox_action->addItem(tr("Relay ON"), MAV_ACTION_RELAY_ON);
    //    m_ui->comboBox_action->addItem(tr("Relay OFF"), MAV_ACTION_RELAY_OFF);
51 52 53 54

    // add frames 
    m_ui->comboBox_frame->addItem("Global",MAV_FRAME_GLOBAL);
    m_ui->comboBox_frame->addItem("Local",MAV_FRAME_LOCAL);
55 56 57 58 59
    m_ui->comboBox_frame->addItem("Mission",MAV_FRAME_MISSION);

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

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

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

70 71 72 73
    // defaults
    //changedAction(wp->getAction());
    //changedFrame(wp->getFrame());

74 75 76 77 78 79 80
    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)));

    connect(m_ui->lonSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setX(double)));
    connect(m_ui->latSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setY(double)));
    connect(m_ui->altSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setZ(double)));
pixhawk's avatar
pixhawk committed
81 82 83 84

    //hidden degree to radian conversion of the yaw angle
    connect(m_ui->yawSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setYaw(int)));
    connect(this, SIGNAL(setYaw(double)), wp, SLOT(setYaw(double)));
pixhawk's avatar
pixhawk committed
85 86 87 88 89

    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
90 91
    connect(m_ui->autoContinue, SIGNAL(stateChanged(int)), this, SLOT(changedAutoContinue(int)));
    connect(m_ui->selectedBox, SIGNAL(stateChanged(int)), this, SLOT(changedCurrent(int)));
92 93
    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
94

95 96
    connect(m_ui->orbitSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setLoiterOrbit(double)));
    connect(m_ui->acceptanceSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setAcceptanceRadius(double)));
pixhawk's avatar
pixhawk committed
97
    connect(m_ui->holdTimeSpinBox, SIGNAL(valueChanged(int)), wp, SLOT(setHoldTime(int)));
98 99 100 101 102 103 104 105
    connect(m_ui->turnsSpinBox, SIGNAL(valueChanged(int)), wp, SLOT(setTurns(int)));

    // 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)));
106 107
    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
108
    connect(customCommand->param7SpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam7(double)));
pixhawk's avatar
pixhawk committed
109 110 111 112 113
}

void WaypointView::setYaw(int yawDegree)
{
    emit setYaw((double)yawDegree*M_PI/180.);
pixhawk's avatar
pixhawk committed
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
}

void WaypointView::moveUp()
{
    emit moveUpWaypoint(wp);
}

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

void WaypointView::remove()
{
    emit removeWaypoint(wp);
129
    deleteLater();
pixhawk's avatar
pixhawk committed
130 131
}

pixhawk's avatar
pixhawk committed
132
void WaypointView::changedAutoContinue(int state)
pixhawk's avatar
pixhawk committed
133 134
{
    if (state == 0)
135
        wp->setAutocontinue(false);
pixhawk's avatar
pixhawk committed
136
    else
137
        wp->setAutocontinue(true);
pixhawk's avatar
pixhawk committed
138 139
}

140
void WaypointView::updateActionView(int action)
141 142
{
    // expose ui based on action
143

144 145
    switch(action)
    {
146
    case MAV_CMD_NAV_TAKEOFF:
147 148 149 150 151 152 153
        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();
154 155
        m_ui->takeOffAngleSpinBox->show();
        break;
156
    case MAV_CMD_NAV_LAND:
157 158 159 160 161 162 163 164 165
        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();
        break;
166
    case MAV_CMD_NAV_RETURN_TO_LAUNCH:
167 168 169 170 171 172 173 174
        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();
175
        break;
176
    case MAV_CMD_NAV_WAYPOINT:
177 178 179 180 181 182
        m_ui->orbitSpinBox->hide();
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->turnsSpinBox->hide();
        m_ui->holdTimeSpinBox->hide();
        m_ui->customActionWidget->hide();

183
        m_ui->autoContinue->show();
184 185
        m_ui->acceptanceSpinBox->show();
        m_ui->yawSpinBox->show();
186
        break;
187
    case MAV_CMD_NAV_LOITER_UNLIM:
188 189 190 191 192 193 194 195 196
        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();
        m_ui->orbitSpinBox->show();
        break;
197
    case MAV_CMD_NAV_LOITER_TURNS:
198 199 200 201 202 203 204 205 206
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->yawSpinBox->hide();
        m_ui->autoContinue->hide();
        m_ui->holdTimeSpinBox->hide();
        m_ui->acceptanceSpinBox->hide();
        m_ui->customActionWidget->hide();
        m_ui->orbitSpinBox->show();
        m_ui->turnsSpinBox->show();
        break;
207
    case MAV_CMD_NAV_LOITER_TIME:
208 209 210 211 212 213
        m_ui->takeOffAngleSpinBox->hide();
        m_ui->yawSpinBox->hide();
        m_ui->turnsSpinBox->hide();
        m_ui->autoContinue->hide();
        m_ui->acceptanceSpinBox->hide();
        m_ui->customActionWidget->hide();
214 215 216 217
        m_ui->orbitSpinBox->show();
        m_ui->holdTimeSpinBox->show();
        break;
    default:
218
        break;
219 220 221
    }
}

222 223 224 225
/**
 * @param index The index of the combo box of the action entry, NOT the action ID
 */
void WaypointView::changedAction(int index)
226 227
{
    // set waypoint action
228
    int actionIndex = m_ui->comboBox_action->itemData(index).toUInt();
229
    if (actionIndex < MAV_CMD_ENUM_END && actionIndex >= 0)
230
    {
231
        MAV_CMD action = (MAV_CMD) actionIndex;
232 233 234 235 236 237 238 239 240
        wp->setAction(action);
    }

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

    switch(actionIndex)
    {
241 242 243 244 245 246 247
    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:
248 249
    case MAV_CMD_CONDITION_DELAY:
    case MAV_CMD_DO_SET_MODE:
250 251
        // Back to global frame
        if (wp->getFrame() == MAV_FRAME_MISSION) changedFrame(0);
252 253
        // Update view
        updateActionView(actionIndex);
254
        break;
255
    case MAV_CMD_ENUM_END:
256 257 258 259 260 261 262
    default:
        // Switch to mission frame
        changedFrame(MAV_FRAME_MISSION);
        wp->setFrame(MAV_FRAME_MISSION);
        break;
    }
}
263

264 265
void WaypointView::updateFrameView(int frame)
{
266 267 268
    switch(frame)
    {
    case MAV_FRAME_GLOBAL:
pixhawk's avatar
pixhawk committed
269 270 271
        m_ui->posNSpinBox->hide();
        m_ui->posESpinBox->hide();
        m_ui->posDSpinBox->hide();
272 273 274
        m_ui->lonSpinBox->show();
        m_ui->latSpinBox->show();
        m_ui->altSpinBox->show();
275 276 277
        // Coordinate frame
        m_ui->comboBox_frame->show();
        m_ui->customActionWidget->hide();
278 279
        break;
    case MAV_FRAME_LOCAL:
pixhawk's avatar
pixhawk committed
280 281 282
        m_ui->lonSpinBox->hide();
        m_ui->latSpinBox->hide();
        m_ui->altSpinBox->hide();
283 284 285
        m_ui->posNSpinBox->show();
        m_ui->posESpinBox->show();
        m_ui->posDSpinBox->show();
286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
        // Coordinate frame
        m_ui->comboBox_frame->show();
        m_ui->customActionWidget->hide();
        break;
    case MAV_FRAME_MISSION:
        // 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();
        m_ui->comboBox_frame->hide();

        // Show action widget
        if (!m_ui->customActionWidget->isVisible())
        {
            m_ui->customActionWidget->show();
        }
        if (!m_ui->autoContinue->isVisible())
        {
            m_ui->autoContinue->show();
        }
315 316 317 318 319 320
        break;
    default:
        std::cerr << "unknown frame" << std::endl;
    }
}

pixhawk's avatar
pixhawk committed
321 322 323 324 325 326 327 328
void WaypointView::deleted(QObject* waypoint)
{
    if (waypoint == this->wp)
    {
        deleteLater();
    }
}

329 330 331 332 333 334 335 336 337
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
338
void WaypointView::changedCurrent(int state)
pixhawk's avatar
pixhawk committed
339
{
pixhawk's avatar
pixhawk committed
340 341
    if (state == 0)
    {
pixhawk's avatar
pixhawk committed
342 343 344
        m_ui->selectedBox->setChecked(true);
        m_ui->selectedBox->setCheckState(Qt::Checked);
        wp->setCurrent(false);
pixhawk's avatar
pixhawk committed
345 346 347
    }
    else
    {
pixhawk's avatar
pixhawk committed
348
        wp->setCurrent(true);
349
        emit changeCurrentWaypoint(wp->getId());   //the slot changeCurrentWaypoint() in WaypointList sets all other current flags to false
pixhawk's avatar
pixhawk committed
350
    }
pixhawk's avatar
pixhawk committed
351 352
}

353 354
void WaypointView::updateValues()
{
pixhawk's avatar
pixhawk committed
355 356 357 358 359 360 361
    // Check if we just lost the wp, delete the widget
    // accordingly
    if (!wp)
    {
        deleteLater();
        return;
    }
362 363
    // Deactivate signals from the WP
    wp->blockSignals(true);
364 365
    // update frame
    MAV_FRAME frame = wp->getFrame();
366
    int frame_index = m_ui->comboBox_frame->findData(frame);
367 368 369
    if (m_ui->comboBox_frame->currentIndex() != frame_index)
    {
        m_ui->comboBox_frame->setCurrentIndex(frame_index);
370
        updateFrameView(frame);
371
    }
372 373 374
    switch(frame)
    {
    case(MAV_FRAME_LOCAL):
pixhawk's avatar
pixhawk committed
375 376 377 378 379 380 381 382 383 384 385 386 387 388
        {
            if (m_ui->posNSpinBox->value() != wp->getX())
            {
                m_ui->posNSpinBox->setValue(wp->getX());
            }
            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());
            }
        }
389 390
        break;
    case(MAV_FRAME_GLOBAL):
pixhawk's avatar
pixhawk committed
391 392 393 394 395 396 397 398 399 400 401 402 403 404
        {
            if (m_ui->lonSpinBox->value() != wp->getX())
            {
                m_ui->lonSpinBox->setValue(wp->getX());
            }
            if (m_ui->latSpinBox->value() != wp->getY())
            {
                m_ui->latSpinBox->setValue(wp->getY());
            }
            if (m_ui->altSpinBox->value() != wp->getZ())
            {
                m_ui->altSpinBox->setValue(wp->getZ());
            }
        }
405
        break;
406 407 408 409 410
    case (MAV_FRAME_MISSION):
        {
            // TODO Change to mission view
        }
        break;
411 412
    }

413
    // Update action
414
    MAV_CMD action = wp->getAction();
415
    int action_index = m_ui->comboBox_action->findData(action);
416 417 418
    // Set to "Other" action if it was -1
    if (action_index == -1)
    {
419
        action_index = m_ui->comboBox_action->findData(MAV_CMD_ENUM_END);
420 421
    }
    // Only update if changed
pixhawk's avatar
pixhawk committed
422 423
    if (m_ui->comboBox_action->currentIndex() != action_index)
    {
424 425 426 427 428 429
        // TODO Action and frame should not be coupled
        if (wp->getFrame() != MAV_FRAME_MISSION)
        {
            m_ui->comboBox_action->setCurrentIndex(action_index);
            updateActionView(action);
        }
pixhawk's avatar
pixhawk committed
430
    }
431 432
    switch(action)
    {
433
    case MAV_CMD_NAV_TAKEOFF:
434
        break;
435
    case MAV_CMD_NAV_LAND:
436
        break;
437
    case MAV_CMD_NAV_WAYPOINT:
438
        break;
439
    case MAV_CMD_NAV_LOITER_UNLIM:
440 441 442 443 444
        break;
    default:
        std::cerr << "unknown action" << std::endl;
    }

pixhawk's avatar
pixhawk committed
445 446 447 448
    if (m_ui->yawSpinBox->value() != wp->getYaw()/M_PI*180.)
    {
        m_ui->yawSpinBox->setValue(wp->getYaw()/M_PI*180.);
    }
pixhawk's avatar
pixhawk committed
449 450 451 452 453 454 455 456
    if (m_ui->selectedBox->isChecked() != wp->getCurrent())
    {
        m_ui->selectedBox->setChecked(wp->getCurrent());
    }
    if (m_ui->autoContinue->isChecked() != wp->getAutoContinue())
    {
        m_ui->autoContinue->setChecked(wp->getAutoContinue());
    }
pixhawk's avatar
pixhawk committed
457
    m_ui->idLabel->setText(QString("%1").arg(wp->getId()));
458
    if (m_ui->orbitSpinBox->value() != wp->getLoiterOrbit())
pixhawk's avatar
pixhawk committed
459
    {
460 461 462 463 464
        m_ui->orbitSpinBox->setValue(wp->getLoiterOrbit());
    }
    if (m_ui->acceptanceSpinBox->value() != wp->getAcceptanceRadius())
    {
        m_ui->acceptanceSpinBox->setValue(wp->getAcceptanceRadius());
pixhawk's avatar
pixhawk committed
465 466 467 468 469
    }
    if (m_ui->holdTimeSpinBox->value() != wp->getHoldTime())
    {
        m_ui->holdTimeSpinBox->setValue(wp->getHoldTime());
    }
470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497

    // UPDATE CUSTOM ACTION WIDGET

    if (customCommand->commandSpinBox->value() != wp->getAction())
    {
        customCommand->commandSpinBox->setValue(wp->getAction());
        qDebug() << "Changed action";
    }
    // Param 1
    if (customCommand->param1SpinBox->value() != wp->getParam1())
    {
        customCommand->param1SpinBox->setValue(wp->getParam1());
    }
    // Param 2
    if (customCommand->param2SpinBox->value() != wp->getParam2())
    {
        customCommand->param2SpinBox->setValue(wp->getParam2());
    }
    // Param 3
    if (customCommand->param3SpinBox->value() != wp->getParam3())
    {
        customCommand->param3SpinBox->setValue(wp->getParam3());
    }
    // Param 4
    if (customCommand->param4SpinBox->value() != wp->getParam4())
    {
        customCommand->param4SpinBox->setValue(wp->getParam4());
    }
498 499 500 501 502 503 504 505 506 507
    // Param 5
    if (customCommand->param5SpinBox->value() != wp->getParam5())
    {
        customCommand->param5SpinBox->setValue(wp->getParam5());
    }
    // Param 6
    if (customCommand->param6SpinBox->value() != wp->getParam6())
    {
        customCommand->param6SpinBox->setValue(wp->getParam6());
    }
lm's avatar
lm committed
508 509 510 511 512
    // Param 7
    if (customCommand->param7SpinBox->value() != wp->getParam7())
    {
        customCommand->param7SpinBox->setValue(wp->getParam7());
    }
513

514
    wp->blockSignals(false);
515 516
}

pixhawk's avatar
pixhawk committed
517
void WaypointView::setCurrent(bool state)
pixhawk's avatar
pixhawk committed
518
{
pixhawk's avatar
pixhawk committed
519 520
    if (state)
    {
pixhawk's avatar
pixhawk committed
521
        m_ui->selectedBox->setCheckState(Qt::Checked);
pixhawk's avatar
pixhawk committed
522 523 524
    }
    else
    {
pixhawk's avatar
pixhawk committed
525
        m_ui->selectedBox->setCheckState(Qt::Unchecked);
pixhawk's avatar
pixhawk committed
526
    }
pixhawk's avatar
pixhawk committed
527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543
}

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

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