QGCCommandButton.cc 9.9 KB
Newer Older
lm's avatar
lm committed
1 2 3 4 5 6 7
#include "QGCCommandButton.h"
#include "ui_QGCCommandButton.h"

#include "MAVLinkProtocol.h"
#include "UASManager.h"

QGCCommandButton::QGCCommandButton(QWidget *parent) :
8
    QGCToolWidgetItem("Command Button", parent),
lm's avatar
lm committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
    ui(new Ui::QGCCommandButton),
    uas(NULL)
{
    ui->setupUi(this);

    connect(ui->commandButton, SIGNAL(clicked()), this, SLOT(sendCommand()));
    connect(ui->editFinishButton, SIGNAL(clicked()), this, SLOT(endEditMode()));
    connect(ui->editButtonName, SIGNAL(textChanged(QString)), this, SLOT(setCommandButtonName(QString)));
    connect(ui->editCommandComboBox, SIGNAL(currentIndexChanged(QString)), ui->nameLabel, SLOT(setText(QString)));

    // Hide all edit items
    ui->editCommandComboBox->hide();
    ui->editFinishButton->hide();
    ui->editNameLabel->hide();
    ui->editButtonName->hide();
24 25 26 27 28 29 30
    ui->editConfirmationCheckBox->hide();
    ui->editComponentSpinBox->hide();
    ui->editParamsVisibleCheckBox->hide();
    ui->editParam1SpinBox->hide();
    ui->editParam2SpinBox->hide();
    ui->editParam3SpinBox->hide();
    ui->editParam4SpinBox->hide();
31 32 33 34 35
    ui->editLine1->hide();
    ui->editLine2->hide();

    ui->editLine1->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
    ui->editLine2->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
lm's avatar
lm committed
36 37 38 39

    // Add commands to combo box
    ui->editCommandComboBox->addItem("DO: Control Video", MAV_CMD_DO_CONTROL_VIDEO);
    ui->editCommandComboBox->addItem("PREFLIGHT: Calibration", MAV_CMD_PREFLIGHT_CALIBRATION);
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
    ui->editCommandComboBox->addItem("CUSTOM 0", 0);
    ui->editCommandComboBox->addItem("CUSTOM 1", 1);
    ui->editCommandComboBox->addItem("CUSTOM 2", 2);
    ui->editCommandComboBox->addItem("CUSTOM 3", 3);
    ui->editCommandComboBox->addItem("CUSTOM 4", 4);
    ui->editCommandComboBox->addItem("CUSTOM 5", 5);
    ui->editCommandComboBox->addItem("CUSTOM 6", 6);
    ui->editCommandComboBox->addItem("CUSTOM 7", 7);
    ui->editCommandComboBox->addItem("CUSTOM 8", 8);
    ui->editCommandComboBox->addItem("CUSTOM 9", 9);
    ui->editCommandComboBox->addItem("CUSTOM 10", 10);
    ui->editCommandComboBox->addItem("CUSTOM 11", 11);
    ui->editCommandComboBox->addItem("CUSTOM 12", 12);
    ui->editCommandComboBox->addItem("CUSTOM 13", 13);
    ui->editCommandComboBox->addItem("CUSTOM 14", 14);
    ui->editCommandComboBox->addItem("CUSTOM 15", 15);
56
    ui->editCommandComboBox->addItem("NAV_WAYPOINT", 16);
LM's avatar
LM committed
57 58 59 60 61 62 63 64 65 66 67 68 69 70
    ui->editCommandComboBox->addItem("MAV_CMD_NAV_LOITER_UNLIM", 17);
    ui->editCommandComboBox->addItem("MAV_CMD_NAV_LOITER_TURNS", 18);
    ui->editCommandComboBox->addItem("MAV_CMD_NAV_LOITER_TIME", 19);
    ui->editCommandComboBox->addItem("MAV_CMD_NAV_RETURN_TO_LAUNCH", 20);
    ui->editCommandComboBox->addItem("MAV_CMD_NAV_LAND", 21);
    ui->editCommandComboBox->addItem("MAV_CMD_NAV_TAKEOFF", 22);
    ui->editCommandComboBox->addItem("MAV_CMD_NAV_ROI", 80);
    ui->editCommandComboBox->addItem("MAV_CMD_NAV_PATHPLANNING", 81);
    ui->editCommandComboBox->addItem("MAV_CMD_DO_SET_MODE", 176);
    ui->editCommandComboBox->addItem("MAV_CMD_DO_CHANGE_SPEED", 178);
    ui->editCommandComboBox->addItem("MAV_CMD_DO_SET_HOME", 179);
    ui->editCommandComboBox->addItem("MAV_CMD_DO_SET_RELAY", 181);
    ui->editCommandComboBox->addItem("MAV_CMD_DO_REPEAT_RELAY", 182);
    ui->editCommandComboBox->addItem("MAV_CMD_DO_SET_SERVO", 183);
71
    ui->editCommandComboBox->setEditable(true);
lm's avatar
lm committed
72 73 74 75 76 77 78 79 80
}

QGCCommandButton::~QGCCommandButton()
{
    delete ui;
}

void QGCCommandButton::sendCommand()
{
81
    if (QGCToolWidgetItem::uas) {
82
        int index = ui->editCommandComboBox->itemData(ui->editCommandComboBox->currentIndex()).toInt();
lm's avatar
lm committed
83
        MAV_CMD command = static_cast<MAV_CMD>(index);
84 85 86 87 88
        int confirm = (ui->editConfirmationCheckBox->isChecked()) ? 1 : 0;
        float param1 = ui->editParam1SpinBox->value();
        float param2 = ui->editParam2SpinBox->value();
        float param3 = ui->editParam3SpinBox->value();
        float param4 = ui->editParam4SpinBox->value();
89 90 91
        float param5 = ui->editParam5SpinBox->value();
        float param6 = ui->editParam6SpinBox->value();
        float param7 = ui->editParam7SpinBox->value();
92 93
        int component = ui->editComponentSpinBox->value();

94
        QGCToolWidgetItem::uas->executeCommand(command, confirm, param1, param2, param3, param4, param5, param6, param7, component);
95
        qDebug() << __FILE__ << __LINE__ << "SENDING COMMAND" << index;
96
    } else {
lm's avatar
lm committed
97 98 99 100 101 102 103 104 105 106 107
        qDebug() << __FILE__ << __LINE__ << "NO UAS SET, DOING NOTHING";
    }
}

void QGCCommandButton::setCommandButtonName(QString text)
{
    ui->commandButton->setText(text);
}

void QGCCommandButton::startEditMode()
{
108 109 110 111
    // Hide elements
    ui->commandButton->hide();
    ui->nameLabel->hide();

lm's avatar
lm committed
112 113 114 115
    ui->editCommandComboBox->show();
    ui->editFinishButton->show();
    ui->editNameLabel->show();
    ui->editButtonName->show();
116 117 118 119 120 121 122
    ui->editConfirmationCheckBox->show();
    ui->editComponentSpinBox->show();
    ui->editParamsVisibleCheckBox->show();
    ui->editParam1SpinBox->show();
    ui->editParam2SpinBox->show();
    ui->editParam3SpinBox->show();
    ui->editParam4SpinBox->show();
123 124 125
    ui->editParam5SpinBox->show();
    ui->editParam6SpinBox->show();
    ui->editParam7SpinBox->show();
126 127
    ui->editLine1->show();
    ui->editLine2->show();
128
    //setStyleSheet("QGroupBox { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
lm's avatar
lm committed
129 130 131 132 133 134 135 136 137
    isInEditMode = true;
}

void QGCCommandButton::endEditMode()
{
    ui->editCommandComboBox->hide();
    ui->editFinishButton->hide();
    ui->editNameLabel->hide();
    ui->editButtonName->hide();
138 139 140
    ui->editConfirmationCheckBox->hide();
    ui->editComponentSpinBox->hide();
    ui->editParamsVisibleCheckBox->hide();
141 142
    ui->editLine1->hide();
    ui->editLine2->hide();
143 144
    if (!ui->editParamsVisibleCheckBox->isChecked())
    {
145 146 147 148
        ui->editParam1SpinBox->hide();
        ui->editParam2SpinBox->hide();
        ui->editParam3SpinBox->hide();
        ui->editParam4SpinBox->hide();
149 150 151
        ui->editParam5SpinBox->hide();
        ui->editParam6SpinBox->hide();
        ui->editParam7SpinBox->hide();
152
    }
lm's avatar
lm committed
153

154 155 156
    ui->commandButton->show();
    ui->nameLabel->show();

lm's avatar
lm committed
157 158
    // Write to settings
    emit editingFinished();
159
    //setStyleSheet("");
lm's avatar
lm committed
160 161 162 163 164
    isInEditMode = false;
}

void QGCCommandButton::writeSettings(QSettings& settings)
{
165
    qDebug() << "COMMAND BUTTON WRITING SETTINGS";
lm's avatar
lm committed
166
    settings.setValue("TYPE", "COMMANDBUTTON");
167 168 169
    settings.setValue("QGC_COMMAND_BUTTON_DESCRIPTION", ui->nameLabel->text());
    settings.setValue("QGC_COMMAND_BUTTON_BUTTONTEXT", ui->commandButton->text());
    settings.setValue("QGC_COMMAND_BUTTON_COMMANDID", ui->editCommandComboBox->itemData(ui->editCommandComboBox->currentIndex()).toInt());
170
    settings.setValue("QGC_COMMAND_BUTTON_PARAMS_VISIBLE", ui->editParamsVisibleCheckBox->isChecked());
171 172 173 174 175 176 177
    settings.setValue("QGC_COMMAND_BUTTON_PARAM1",  ui->editParam1SpinBox->value());
    settings.setValue("QGC_COMMAND_BUTTON_PARAM2",  ui->editParam2SpinBox->value());
    settings.setValue("QGC_COMMAND_BUTTON_PARAM3",  ui->editParam3SpinBox->value());
    settings.setValue("QGC_COMMAND_BUTTON_PARAM4",  ui->editParam4SpinBox->value());
    settings.setValue("QGC_COMMAND_BUTTON_PARAM5",  ui->editParam5SpinBox->value());
    settings.setValue("QGC_COMMAND_BUTTON_PARAM6",  ui->editParam6SpinBox->value());
    settings.setValue("QGC_COMMAND_BUTTON_PARAM7",  ui->editParam7SpinBox->value());
lm's avatar
lm committed
178 179 180 181 182
    settings.sync();
}

void QGCCommandButton::readSettings(const QSettings& settings)
{
183 184 185 186 187 188 189 190
    ui->editNameLabel->setText(settings.value("QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString());
    ui->editButtonName->setText(settings.value("QGC_COMMAND_BUTTON_BUTTONTEXT", "UNKNOWN").toString());
    ui->editCommandComboBox->setCurrentIndex(settings.value("QGC_COMMAND_BUTTON_COMMANDID", 0).toInt());

    ui->nameLabel->setText(settings.value("QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString());
    ui->commandButton->setText(settings.value("QGC_COMMAND_BUTTON_BUTTONTEXT", "UNKNOWN").toString());

    int commandId = settings.value("QGC_COMMAND_BUTTON_COMMANDID", 0).toInt();
lm's avatar
lm committed
191

192 193 194 195 196 197 198
    ui->editParam1SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM1", 0.0).toDouble());
    ui->editParam2SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM2", 0.0).toDouble());
    ui->editParam3SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM3", 0.0).toDouble());
    ui->editParam4SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM4", 0.0).toDouble());
    ui->editParam5SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM5", 0.0).toDouble());
    ui->editParam6SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM6", 0.0).toDouble());
    ui->editParam7SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM7", 0.0).toDouble());
199 200 201 202 203 204 205 206 207 208 209 210

    ui->editCommandComboBox->setCurrentIndex(0);

    // Find combobox entry for this data
    for (int i = 0; i < ui->editCommandComboBox->count(); ++i)
    {
        if (commandId == ui->editCommandComboBox->itemData(i).toInt())
        {
            ui->editCommandComboBox->setCurrentIndex(i);
        }
    }

211
    ui->editParamsVisibleCheckBox->setChecked(settings.value("QGC_COMMAND_BUTTON_PARAMS_VISIBLE").toBool());
212 213
    if (ui->editParamsVisibleCheckBox->isChecked())
    {
214 215 216 217
        ui->editParam1SpinBox->show();
        ui->editParam2SpinBox->show();
        ui->editParam3SpinBox->show();
        ui->editParam4SpinBox->show();
218 219 220
        ui->editParam5SpinBox->show();
        ui->editParam6SpinBox->show();
        ui->editParam7SpinBox->show();
221 222 223
    }
    else
    {
224 225 226 227
        ui->editParam1SpinBox->hide();
        ui->editParam2SpinBox->hide();
        ui->editParam3SpinBox->hide();
        ui->editParam4SpinBox->hide();
228 229 230
        ui->editParam5SpinBox->hide();
        ui->editParam6SpinBox->hide();
        ui->editParam7SpinBox->hide();
231
    }
lm's avatar
lm committed
232 233
    qDebug() << "DONE READING SETTINGS";
}