WaypointView.cc 4.27 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
    updateValues();
pixhawk's avatar
pixhawk committed
52 53 54 55

    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
56 57 58 59

    //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
60 61 62 63 64

    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
65 66
    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
67 68 69

    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
70 71 72 73 74
}

void WaypointView::setYaw(int yawDegree)
{
    emit setYaw((double)yawDegree*M_PI/180.);
pixhawk's avatar
pixhawk committed
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
}

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
93
void WaypointView::changedAutoContinue(int state)
pixhawk's avatar
pixhawk committed
94 95
{
    if (state == 0)
96
        wp->setAutocontinue(false);
pixhawk's avatar
pixhawk committed
97
    else
98
        wp->setAutocontinue(true);
pixhawk's avatar
pixhawk committed
99 100
}

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

116 117 118 119 120 121 122 123 124 125 126 127 128
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
129
void WaypointView::setCurrent(bool state)
pixhawk's avatar
pixhawk committed
130
{
pixhawk's avatar
pixhawk committed
131 132
    if (state)
    {
pixhawk's avatar
pixhawk committed
133
        m_ui->selectedBox->setCheckState(Qt::Checked);
pixhawk's avatar
pixhawk committed
134 135 136 137 138
    }
    else
    {
         m_ui->selectedBox->setCheckState(Qt::Unchecked);
    }
pixhawk's avatar
pixhawk committed
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
}

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

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