WaypointView.cc 4.11 KB
Newer Older
pixhawk's avatar
pixhawk committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
/*=====================================================================

PIXHAWK Micro Air Vehicle Flying Robotics Toolkit

(c) 2009, 2010 PIXHAWK PROJECT  <http://pixhawk.ethz.ch>

This file is part of the PIXHAWK project

    PIXHAWK is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    PIXHAWK is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.

======================================================================*/

/**
 * @file
 *   @brief Displays one waypoint
 *
 *   @author Lorenz Meier <mavteam@student.ethz.ch>
 *   @author Benjamin Knecht <mavteam@student.ethz.ch>
30
 *   @author Petri Tanskanen <mavteam@student.ethz.ch>
pixhawk's avatar
pixhawk committed
31 32 33 34 35 36
 *
 */

#include <QDoubleSpinBox>
#include <QDebug>

pixhawk's avatar
pixhawk committed
37 38
#include <cmath>    //M_PI

pixhawk's avatar
pixhawk committed
39 40 41 42 43 44 45 46 47 48 49 50
#include "WaypointView.h"
#include "ui_WaypointView.h"

WaypointView::WaypointView(Waypoint* wp, QWidget* parent) :
    QWidget(parent),
    m_ui(new Ui::WaypointView)
{
    m_ui->setupUi(this);

    this->wp = wp;

    // Read values and set user interface
51 52 53
    m_ui->xSpinBox->setValue(wp->getX());
    m_ui->ySpinBox->setValue(wp->getY());
    m_ui->zSpinBox->setValue(wp->getZ());
pixhawk's avatar
pixhawk committed
54
    m_ui->yawSpinBox->setValue(wp->getYaw()/M_PI*180.);
55 56
    m_ui->selectedBox->setChecked(wp->getCurrent());
    m_ui->autoContinue->setChecked(wp->getAutoContinue());
pixhawk's avatar
pixhawk committed
57 58 59
    m_ui->idLabel->setText(QString("%1").arg(wp->getId()));\
    m_ui->orbitSpinBox->setValue(wp->getOrbit());
    m_ui->holdTimeSpinBox->setValue(wp->getHoldTime());
pixhawk's avatar
pixhawk committed
60 61 62 63

    connect(m_ui->xSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setX(double)));
    connect(m_ui->ySpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setY(double)));
    connect(m_ui->zSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setZ(double)));
pixhawk's avatar
pixhawk committed
64 65 66 67

    //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
68 69 70 71 72

    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
73 74
    connect(m_ui->autoContinue, SIGNAL(stateChanged(int)), this, SLOT(changedAutoContinue(int)));
    connect(m_ui->selectedBox, SIGNAL(stateChanged(int)), this, SLOT(changedCurrent(int)));
pixhawk's avatar
pixhawk committed
75 76 77

    connect(m_ui->orbitSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setOrbit(double)));
    connect(m_ui->holdTimeSpinBox, SIGNAL(valueChanged(int)), wp, SLOT(setHoldTime(int)));
pixhawk's avatar
pixhawk committed
78 79 80 81 82
}

void WaypointView::setYaw(int yawDegree)
{
    emit setYaw((double)yawDegree*M_PI/180.);
pixhawk's avatar
pixhawk committed
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
}

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

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

void WaypointView::remove()
{
    emit removeWaypoint(wp);
    delete this;
}

pixhawk's avatar
pixhawk committed
101
void WaypointView::changedAutoContinue(int state)
pixhawk's avatar
pixhawk committed
102 103
{
    if (state == 0)
104
        wp->setAutocontinue(false);
pixhawk's avatar
pixhawk committed
105
    else
106
        wp->setAutocontinue(true);
pixhawk's avatar
pixhawk committed
107 108
}

pixhawk's avatar
pixhawk committed
109
void WaypointView::changedCurrent(int state)
pixhawk's avatar
pixhawk committed
110
{
pixhawk's avatar
pixhawk committed
111 112 113 114 115 116 117 118 119
    if (state == 0)
    {
        wp->setCurrent(false);
    }
    else
    {
        wp->setCurrent(true);
        emit currentWaypointChanged(wp->getId());   //the slot currentWayppointChanged() in WaypointList sets all other current flags to false
    }
pixhawk's avatar
pixhawk committed
120 121
}

pixhawk's avatar
pixhawk committed
122
void WaypointView::setCurrent(bool state)
pixhawk's avatar
pixhawk committed
123
{
pixhawk's avatar
pixhawk committed
124 125
    if (state)
    {
pixhawk's avatar
pixhawk committed
126
        m_ui->selectedBox->setCheckState(Qt::Checked);
pixhawk's avatar
pixhawk committed
127 128 129 130 131
    }
    else
    {
         m_ui->selectedBox->setCheckState(Qt::Unchecked);
    }
pixhawk's avatar
pixhawk committed
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
}

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

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