You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
5.8 KiB
189 lines
5.8 KiB
/*===================================================================== |
|
|
|
PIXHAWK Micro Air Vehicle Flying Robotics Toolkit |
|
Please see our website at <http://pixhawk.ethz.ch> |
|
|
|
(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 Implementation of configuration window for serial links |
|
* |
|
* @author Lorenz Meier <mavteam@student.ethz.ch> |
|
* |
|
*/ |
|
|
|
#include <QDebug> |
|
|
|
#include <QDir> |
|
#include <QFileInfoList> |
|
#include <QBoxLayout> |
|
#include <QWidget> |
|
|
|
#include "CommConfigurationWindow.h" |
|
#include "SerialConfigurationWindow.h" |
|
#include "SerialLinkInterface.h" |
|
#include "UDPLink.h" |
|
#include "MAVLinkProtocol.h" |
|
#include "MAVLinkSettingsWidget.h" |
|
|
|
CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolInterface* protocol, QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags) |
|
{ |
|
this->link = link; |
|
|
|
// Setup the user interface according to link type |
|
ui.setupUi(this); |
|
|
|
// Create action to open this menu |
|
// Create configuration action for this link |
|
// Connect the current UAS |
|
action = new QAction(QIcon(":/images/devices/network-wireless.svg"), "", link); |
|
setLinkName(link->getName()); |
|
connect(action, SIGNAL(triggered()), this, SLOT(show())); |
|
|
|
// Make sure that a change in the link name will be reflected in the UI |
|
connect(link, SIGNAL(nameChanged(QString)), this, SLOT(setLinkName(QString))); |
|
|
|
// Setup user actions and link notifications |
|
connect(ui.connectButton, SIGNAL(clicked()), this, SLOT(setConnection())); |
|
connect(ui.closeButton, SIGNAL(clicked()), this->window(), SLOT(close())); |
|
connect(ui.deleteButton, SIGNAL(clicked()), this, SLOT(remove())); |
|
|
|
connect(this->link, SIGNAL(connected(bool)), this, SLOT(connectionState(bool))); |
|
|
|
// Fill in the current data |
|
if(this->link->isConnected()) ui.connectButton->setChecked(true); |
|
//connect(this->link, SIGNAL(connected(bool)), ui.connectButton, SLOT(setChecked(bool))); |
|
|
|
if(this->link->isConnected()) |
|
{ |
|
ui.connectionStatusLabel->setText(tr("Connected")); |
|
|
|
// TODO Deactivate all settings to force user to manually disconnect first |
|
} |
|
else |
|
{ |
|
ui.connectionStatusLabel->setText(tr("Disconnected")); |
|
} |
|
|
|
// TODO Move these calls to each link so that dynamic casts vanish |
|
|
|
// Open details pane for serial link if necessary |
|
SerialLinkInterface* serial = dynamic_cast<SerialLinkInterface*>(link); |
|
if(serial != 0) |
|
{ |
|
QWidget* conf = new SerialConfigurationWindow(serial, this); |
|
QBoxLayout* layout = new QBoxLayout(QBoxLayout::LeftToRight, ui.linkGroupBox); |
|
layout->addWidget(conf); |
|
ui.linkGroupBox->setLayout(layout); |
|
ui.linkGroupBox->setTitle(tr("serial link")); |
|
//ui.linkGroupBox->setTitle(link->getName()); |
|
//connect(link, SIGNAL(nameChanged(QString)), ui.linkGroupBox, SLOT(setTitle(QString))); |
|
} |
|
else if (dynamic_cast<UDPLink*>(link) != 0) |
|
{ |
|
ui.linkGroupBox->setTitle(tr("udp link")); |
|
} |
|
else |
|
{ |
|
qDebug() << "Link is NOT a known link, can't open configuration window"; |
|
} |
|
|
|
// Open details pane for MAVLink if necessary |
|
MAVLinkProtocol* mavlink = dynamic_cast<MAVLinkProtocol*>(protocol); |
|
if(mavlink != 0) |
|
{ |
|
QWidget* conf = new MAVLinkSettingsWidget(mavlink, this); |
|
QBoxLayout* layout = new QBoxLayout(QBoxLayout::LeftToRight, ui.protocolGroupBox); |
|
layout->addWidget(conf); |
|
ui.protocolGroupBox->setLayout(layout); |
|
ui.protocolGroupBox->setTitle(protocol->getName()); |
|
} |
|
else |
|
{ |
|
qDebug() << "Protocol is NOT MAVLink, can't open configuration window"; |
|
} |
|
|
|
// Open details for UDP link if necessary |
|
// TODO |
|
|
|
// Display the widget |
|
this->window()->setWindowTitle(tr("Settings for ") + this->link->getName()); |
|
this->hide(); |
|
} |
|
|
|
CommConfigurationWindow::~CommConfigurationWindow() { |
|
|
|
} |
|
|
|
QAction* CommConfigurationWindow::getAction() |
|
{ |
|
return action; |
|
} |
|
|
|
void CommConfigurationWindow::setLinkType(int linktype) |
|
{ |
|
// Adjust the form layout per link type |
|
Q_UNUSED(linktype); |
|
} |
|
|
|
void CommConfigurationWindow::setConnection() |
|
{ |
|
if(!link->isConnected()) |
|
{ |
|
link->connect(); |
|
} |
|
else |
|
{ |
|
link->disconnect(); |
|
} |
|
} |
|
|
|
void CommConfigurationWindow::setLinkName(QString name) |
|
{ |
|
Q_UNUSED(name); // FIXME |
|
action->setText(tr("Configure ") + link->getName()); |
|
action->setStatusTip(tr("Configure ") + link->getName()); |
|
this->window()->setWindowTitle(tr("Settings for ") + this->link->getName()); |
|
} |
|
|
|
void CommConfigurationWindow::remove() |
|
{ |
|
link->disconnect(); |
|
//delete link; |
|
//delete action; |
|
this->window()->close(); |
|
qDebug() << "TODO: Link cannot be deleted: CommConfigurationWindow::remove() NOT IMPLEMENTED!"; |
|
} |
|
|
|
void CommConfigurationWindow::connectionState(bool connect) |
|
{ |
|
ui.connectButton->setChecked(connect); |
|
if(connect) |
|
{ |
|
ui.connectionStatusLabel->setText(tr("Connected")); |
|
ui.connectButton->setText(tr("Disconnect")); |
|
} |
|
else |
|
{ |
|
ui.connectionStatusLabel->setText(tr("Disconnected")); |
|
ui.connectButton->setText(tr("Connect")); |
|
} |
|
}
|
|
|