WaypointView.cc 4.87 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
#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;
James Goppert's avatar
James Goppert committed
49 50 51
    wp->setType(Waypoint::LOCAL);
    m_ui->orbitSpinBox->setEnabled(false);
    m_ui->orbitSpinBox->hide();
pixhawk's avatar
pixhawk committed
52 53

    // Read values and set user interface
54
    updateValues();
pixhawk's avatar
pixhawk committed
55 56 57 58

    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
59 60 61 62

    //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
63 64 65 66 67

    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
68 69
    connect(m_ui->autoContinue, SIGNAL(stateChanged(int)), this, SLOT(changedAutoContinue(int)));
    connect(m_ui->selectedBox, SIGNAL(stateChanged(int)), this, SLOT(changedCurrent(int)));
James Goppert's avatar
James Goppert committed
70 71 72
    connect(m_ui->orbitCheckBox, SIGNAL(stateChanged(int)), this, SLOT(changeOrbitalState(int)));


pixhawk's avatar
pixhawk committed
73 74 75

    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
76 77 78 79 80
}

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

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
99
void WaypointView::changedAutoContinue(int state)
pixhawk's avatar
pixhawk committed
100 101
{
    if (state == 0)
102
        wp->setAutocontinue(false);
pixhawk's avatar
pixhawk committed
103
    else
104
        wp->setAutocontinue(true);
pixhawk's avatar
pixhawk committed
105 106
}

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

122 123 124 125 126 127 128 129 130 131 132 133 134
void WaypointView::updateValues()
{
    m_ui->xSpinBox->setValue(wp->getX());
    m_ui->ySpinBox->setValue(wp->getY());
    m_ui->zSpinBox->setValue(wp->getZ());
    m_ui->yawSpinBox->setValue(wp->getYaw()/M_PI*180.);
    m_ui->selectedBox->setChecked(wp->getCurrent());
    m_ui->autoContinue->setChecked(wp->getAutoContinue());
    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
135
void WaypointView::setCurrent(bool state)
pixhawk's avatar
pixhawk committed
136
{
pixhawk's avatar
pixhawk committed
137 138
    if (state)
    {
pixhawk's avatar
pixhawk committed
139
        m_ui->selectedBox->setCheckState(Qt::Checked);
pixhawk's avatar
pixhawk committed
140 141 142 143 144
    }
    else
    {
         m_ui->selectedBox->setCheckState(Qt::Unchecked);
    }
pixhawk's avatar
pixhawk committed
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
}

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

void WaypointView::changeEvent(QEvent *e)
{
    switch (e->type()) {
    case QEvent::LanguageChange:
        m_ui->retranslateUi(this);
        break;
    default:
        break;
    }
}
James Goppert's avatar
James Goppert committed
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179

void WaypointView::changeOrbitalState(int state)
{
    Q_UNUSED(state);

    if(m_ui->orbitCheckBox->isChecked())
    {
        m_ui->orbitSpinBox->setEnabled(true);
        m_ui->orbitSpinBox->show();
        wp->setType(Waypoint::LOCAL_ORBIT);
    }
    else
    {
        m_ui->orbitSpinBox->setEnabled(false);
        m_ui->orbitSpinBox->hide();
        wp->setType(Waypoint::LOCAL);
    }
}