Commit c81927fa authored by Don Gagne's avatar Don Gagne

Rework Connect toolbar button usage

Now works for more than Serial links
parent cf777949
...@@ -252,8 +252,6 @@ bool QGCApplication::_initForNormalAppBoot(void) ...@@ -252,8 +252,6 @@ bool QGCApplication::_initForNormalAppBoot(void)
_createSingletons(); _createSingletons();
enum MainWindow::CUSTOM_MODE mode = (enum MainWindow::CUSTOM_MODE) settings.value("QGC_CUSTOM_MODE", (int)MainWindow::CUSTOM_MODE_PX4).toInt();
// Show splash screen // Show splash screen
QPixmap splashImage(":/files/images/splash.png"); QPixmap splashImage(":/files/images/splash.png");
QSplashScreen* splashScreen = new QSplashScreen(splashImage); QSplashScreen* splashScreen = new QSplashScreen(splashImage);
...@@ -268,7 +266,7 @@ bool QGCApplication::_initForNormalAppBoot(void) ...@@ -268,7 +266,7 @@ bool QGCApplication::_initForNormalAppBoot(void)
// Start the user interface // Start the user interface
splashScreen->showMessage(tr("Starting user interface"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141)); splashScreen->showMessage(tr("Starting user interface"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
MainWindow* mainWindow = MainWindow::_create(splashScreen, mode); MainWindow* mainWindow = MainWindow::_create(splashScreen);
Q_CHECK_PTR(mainWindow); Q_CHECK_PTR(mainWindow);
// If we made it this far and we still don't have a location. Either the specfied location was invalid // If we made it this far and we still don't have a location. Either the specfied location was invalid
...@@ -281,47 +279,10 @@ bool QGCApplication::_initForNormalAppBoot(void) ...@@ -281,47 +279,10 @@ bool QGCApplication::_initForNormalAppBoot(void)
mainWindow->showSettings(); mainWindow->showSettings();
} }
UDPLink* udpLink = NULL;
if (mainWindow->getCustomMode() == MainWindow::CUSTOM_MODE_WIFI)
{
// Connect links
// to make sure that all components are initialized when the
// first messages arrive
udpLink = new UDPLink(QHostAddress::Any, 14550);
LinkManager::instance()->addLink(udpLink);
} else {
// We want to have a default serial link available for "quick" connecting.
SerialLink *slink = new SerialLink();
LinkManager::instance()->addLink(slink);
}
#ifdef QGC_RTLAB_ENABLED
// Add OpalRT Link, but do not connect
OpalLink* opalLink = new OpalLink();
_mainWindow->addLink(opalLink);
#endif
// Remove splash screen // Remove splash screen
splashScreen->finish(mainWindow); splashScreen->finish(mainWindow);
mainWindow->splashScreenFinished(); mainWindow->splashScreenFinished();
// Check if link could be connected
if (udpLink && LinkManager::instance()->connectLink(udpLink))
{
QMessageBox::StandardButton button = QGCMessageBox::critical(tr("Could not connect UDP port. Is an instance of %1 already running?").arg(qAppName()),
tr("It is recommended to close the application and stop all instances. Click Yes to close."),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::No);
// Exit application
if (button == QMessageBox::Yes)
{
//mainWindow->close();
QTimer::singleShot(200, mainWindow, SLOT(close()));
}
}
// Now that main window is upcheck for lost log files // Now that main window is upcheck for lost log files
connect(this, &QGCApplication::checkForLostLogFiles, MAVLinkProtocol::instance(), &MAVLinkProtocol::checkForLostLogFiles); connect(this, &QGCApplication::checkForLostLogFiles, MAVLinkProtocol::instance(), &MAVLinkProtocol::checkForLostLogFiles);
emit checkForLostLogFiles(); emit checkForLostLogFiles();
......
...@@ -84,6 +84,9 @@ void LinkManager::addLink(LinkInterface* link) ...@@ -84,6 +84,9 @@ void LinkManager::addLink(LinkInterface* link)
connect(link, &LinkInterface::connected, mavlink, &MAVLinkProtocol::linkConnected); connect(link, &LinkInterface::connected, mavlink, &MAVLinkProtocol::linkConnected);
connect(link, &LinkInterface::disconnected, mavlink, &MAVLinkProtocol::linkDisconnected); connect(link, &LinkInterface::disconnected, mavlink, &MAVLinkProtocol::linkDisconnected);
mavlink->resetMetadataForLink(link); mavlink->resetMetadataForLink(link);
connect(link, &LinkInterface::connected, this, &LinkManager::_linkConnected);
connect(link, &LinkInterface::disconnected, this, &LinkManager::_linkDisconnected);
} }
bool LinkManager::connectAll() bool LinkManager::connectAll()
...@@ -131,13 +134,22 @@ bool LinkManager::connectLink(LinkInterface* link) ...@@ -131,13 +134,22 @@ bool LinkManager::connectLink(LinkInterface* link)
return false; return false;
} }
return link->_connect(); if (link->_connect()) {
return true;
} else {
return false;
}
} }
bool LinkManager::disconnectLink(LinkInterface* link) bool LinkManager::disconnectLink(LinkInterface* link)
{ {
Q_ASSERT(link); Q_ASSERT(link);
return link->_disconnect();
if (link->_disconnect()) {
return true;
} else {
return false;
}
} }
void LinkManager::deleteLink(LinkInterface* link) void LinkManager::deleteLink(LinkInterface* link)
...@@ -218,3 +230,13 @@ void LinkManager::_shutdown(void) ...@@ -218,3 +230,13 @@ void LinkManager::_shutdown(void)
deleteLink(link); deleteLink(link);
} }
} }
void LinkManager::_linkConnected(void)
{
emit linkConnected((LinkInterface*)sender());
}
void LinkManager::_linkDisconnected(void)
{
emit linkDisconnected((LinkInterface*)sender());
}
...@@ -91,6 +91,12 @@ public: ...@@ -91,6 +91,12 @@ public:
signals: signals:
void newLink(LinkInterface* link); void newLink(LinkInterface* link);
void linkDeleted(LinkInterface* link); void linkDeleted(LinkInterface* link);
void linkConnected(LinkInterface* link);
void linkDisconnected(LinkInterface* link);
private slots:
void _linkConnected(void);
void _linkDisconnected(void);
private: private:
/// All access to LinkManager is through LinkManager::instance /// All access to LinkManager is through LinkManager::instance
......
...@@ -277,16 +277,15 @@ bool UDPLink::_disconnect(void) ...@@ -277,16 +277,15 @@ bool UDPLink::_disconnect(void)
this->quit(); this->quit();
this->wait(); this->wait();
if(socket) if (socket) {
{
// Make sure delete happen on correct thread // Make sure delete happen on correct thread
socket->deleteLater(); socket->deleteLater();
socket = NULL; socket = NULL;
emit disconnected();
} }
connectState = false; connectState = false;
emit disconnected();
return !connectState; return !connectState;
} }
......
...@@ -42,7 +42,7 @@ void MainWindowTest::init(void) ...@@ -42,7 +42,7 @@ void MainWindowTest::init(void)
{ {
UnitTest::init(); UnitTest::init();
_mainWindow = MainWindow::_create(NULL, MainWindow::CUSTOM_MODE_PX4); _mainWindow = MainWindow::_create(NULL);
Q_CHECK_PTR(_mainWindow); Q_CHECK_PTR(_mainWindow);
} }
......
...@@ -368,7 +368,6 @@ void CommConfigurationWindow::remove() ...@@ -368,7 +368,6 @@ void CommConfigurationWindow::remove()
action=NULL; action=NULL;
if(link) { if(link) {
LinkManager::instance()->disconnectLink(link); // disconnect connection
link->deleteLater(); link->deleteLater();
} }
link=NULL; link=NULL;
......
...@@ -80,11 +80,11 @@ This file is part of the QGROUNDCONTROL project ...@@ -80,11 +80,11 @@ This file is part of the QGROUNDCONTROL project
static MainWindow* _instance = NULL; ///< @brief MainWindow singleton static MainWindow* _instance = NULL; ///< @brief MainWindow singleton
MainWindow* MainWindow::_create(QSplashScreen* splashScreen, enum MainWindow::CUSTOM_MODE mode) MainWindow* MainWindow::_create(QSplashScreen* splashScreen)
{ {
Q_ASSERT(_instance == NULL); Q_ASSERT(_instance == NULL);
new MainWindow(splashScreen, mode); new MainWindow(splashScreen);
// _instance is set in constructor // _instance is set in constructor
Q_ASSERT(_instance); Q_ASSERT(_instance);
...@@ -105,13 +105,12 @@ void MainWindow::deleteInstance(void) ...@@ -105,13 +105,12 @@ void MainWindow::deleteInstance(void)
/// @brief Private constructor for MainWindow. MainWindow singleton is only ever created /// @brief Private constructor for MainWindow. MainWindow singleton is only ever created
/// by MainWindow::_create method. Hence no other code should have access to /// by MainWindow::_create method. Hence no other code should have access to
/// constructor. /// constructor.
MainWindow::MainWindow(QSplashScreen* splashScreen, enum MainWindow::CUSTOM_MODE mode) : MainWindow::MainWindow(QSplashScreen* splashScreen) :
currentView(VIEW_FLIGHT), currentView(VIEW_FLIGHT),
centerStackActionGroup(new QActionGroup(this)), centerStackActionGroup(new QActionGroup(this)),
autoReconnect(false), autoReconnect(false),
simulationLink(NULL), simulationLink(NULL),
lowPowerMode(false), lowPowerMode(false),
customMode(mode),
menuActionHelper(new MenuActionHelper()), menuActionHelper(new MenuActionHelper()),
_splashScreen(splashScreen) _splashScreen(splashScreen)
{ {
...@@ -405,10 +404,10 @@ QString MainWindow::getWindowStateKey() ...@@ -405,10 +404,10 @@ QString MainWindow::getWindowStateKey()
{ {
if (UASManager::instance()->getActiveUAS()) if (UASManager::instance()->getActiveUAS())
{ {
return QString::number(currentView)+"_windowstate_" + QString::number(getCustomMode()) + "_" + UASManager::instance()->getActiveUAS()->getAutopilotTypeName(); return QString::number(currentView)+"_windowstate_" + UASManager::instance()->getActiveUAS()->getAutopilotTypeName();
} }
else else
return QString::number(currentView)+"_windowstate_" + QString::number(getCustomMode()); return QString::number(currentView)+"_windowstate_";
} }
QString MainWindow::getWindowGeometryKey() QString MainWindow::getWindowGeometryKey()
...@@ -938,8 +937,6 @@ void MainWindow::loadSettings() ...@@ -938,8 +937,6 @@ void MainWindow::loadSettings()
{ {
QSettings settings; QSettings settings;
customMode = static_cast<enum MainWindow::CUSTOM_MODE>(settings.value("QGC_CUSTOM_MODE", (unsigned int)MainWindow::CUSTOM_MODE_NONE).toInt());
settings.beginGroup("QGC_MAINWINDOW"); settings.beginGroup("QGC_MAINWINDOW");
autoReconnect = settings.value("AUTO_RECONNECT", autoReconnect).toBool(); autoReconnect = settings.value("AUTO_RECONNECT", autoReconnect).toBool();
lowPowerMode = settings.value("LOW_POWER_MODE", lowPowerMode).toBool(); lowPowerMode = settings.value("LOW_POWER_MODE", lowPowerMode).toBool();
...@@ -953,8 +950,6 @@ void MainWindow::storeSettings() ...@@ -953,8 +950,6 @@ void MainWindow::storeSettings()
{ {
QSettings settings; QSettings settings;
settings.setValue("QGC_CUSTOM_MODE", (int)customMode);
settings.beginGroup("QGC_MAINWINDOW"); settings.beginGroup("QGC_MAINWINDOW");
settings.setValue("AUTO_RECONNECT", autoReconnect); settings.setValue("AUTO_RECONNECT", autoReconnect);
settings.setValue("LOW_POWER_MODE", lowPowerMode); settings.setValue("LOW_POWER_MODE", lowPowerMode);
......
...@@ -88,14 +88,6 @@ class MainWindow : public QMainWindow ...@@ -88,14 +88,6 @@ class MainWindow : public QMainWindow
Q_OBJECT Q_OBJECT
public: public:
enum CUSTOM_MODE {
CUSTOM_MODE_UNCHANGED = 0,
CUSTOM_MODE_NONE,
CUSTOM_MODE_PX4,
CUSTOM_MODE_WIFI
};
/// @brief Returns the MainWindow singleton. Will not create the MainWindow if it has not already /// @brief Returns the MainWindow singleton. Will not create the MainWindow if it has not already
/// been created. /// been created.
static MainWindow* instance(void); static MainWindow* instance(void);
...@@ -104,7 +96,7 @@ public: ...@@ -104,7 +96,7 @@ public:
void deleteInstance(void); void deleteInstance(void);
/// @brief Creates the MainWindow singleton. Should only be called once by QGCApplication. /// @brief Creates the MainWindow singleton. Should only be called once by QGCApplication.
static MainWindow* _create(QSplashScreen* splashScreen, enum MainWindow::CUSTOM_MODE mode); static MainWindow* _create(QSplashScreen* splashScreen);
/// @brief Called to indicate that splash screen is no longer being displayed. /// @brief Called to indicate that splash screen is no longer being displayed.
void splashScreenFinished(void) { _splashScreen = NULL; } void splashScreenFinished(void) { _splashScreen = NULL; }
...@@ -127,19 +119,6 @@ public: ...@@ -127,19 +119,6 @@ public:
return lowPowerMode; return lowPowerMode;
} }
void setCustomMode(MainWindow::CUSTOM_MODE mode)
{
if (mode != CUSTOM_MODE_UNCHANGED)
{
customMode = mode;
}
}
MainWindow::CUSTOM_MODE getCustomMode() const
{
return customMode;
}
QList<QAction*> listLinkMenuActions(); QList<QAction*> listLinkMenuActions();
void hideSplashScreen(void); void hideSplashScreen(void);
...@@ -420,14 +399,13 @@ protected: ...@@ -420,14 +399,13 @@ protected:
bool lowPowerMode; ///< If enabled, QGC reduces the update rates of all widgets bool lowPowerMode; ///< If enabled, QGC reduces the update rates of all widgets
QGCFlightGearLink* fgLink; QGCFlightGearLink* fgLink;
QTimer windowNameUpdateTimer; QTimer windowNameUpdateTimer;
CUSTOM_MODE customMode;
private slots: private slots:
void _addLinkMenu(LinkInterface* link); void _addLinkMenu(LinkInterface* link);
private: private:
/// Constructor is private since all creation should be through MainWindow::_create /// Constructor is private since all creation should be through MainWindow::_create
MainWindow(QSplashScreen* splashScreen, enum MainWindow::CUSTOM_MODE mode); MainWindow(QSplashScreen* splashScreen);
void _openUrl(const QString& url, const QString& errorMessage); void _openUrl(const QString& url, const QString& errorMessage);
......
...@@ -24,43 +24,41 @@ This file is part of the QGROUNDCONTROL project ...@@ -24,43 +24,41 @@ This file is part of the QGROUNDCONTROL project
#include <QToolButton> #include <QToolButton>
#include <QLabel> #include <QLabel>
#include <QSpacerItem> #include <QSpacerItem>
#include <QSerialPortInfo>
#include "SerialLink.h" #include "SerialLink.h"
#include "UDPLink.h"
#include "QGCToolBar.h" #include "QGCToolBar.h"
#include "UASManager.h" #include "UASManager.h"
#include "MainWindow.h" #include "MainWindow.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "CommConfigurationWindow.h"
QGCToolBar::QGCToolBar(QWidget *parent) : QGCToolBar::QGCToolBar(QWidget *parent) :
QToolBar(parent), QToolBar(parent),
mav(NULL), mav(NULL),
userBaudChoice(false),
userPortChoice(false),
changed(true), changed(true),
batteryPercent(0), batteryPercent(0),
batteryVoltage(0), batteryVoltage(0),
wpId(0), wpId(0),
wpDistance(0), wpDistance(0),
altitudeMSL(0),
altitudeRel(0), altitudeRel(0),
systemArmed(false), systemArmed(false),
currentLink(NULL), currentLink(NULL),
firstAction(NULL) firstAction(NULL),
_linkMgr(LinkManager::instance()),
_linkCombo(NULL),
_linkComboAction(NULL),
_linkSelectedOnce(false),
_baudCombo(NULL),
_baudComboAction(NULL),
_linksConnected(false)
{ {
setObjectName("QGCToolBar"); setObjectName("QGCToolBar");
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
// Do not load UI, wait for actions connect(LinkManager::instance(), &LinkManager::linkConnected, this, &QGCToolBar::_linkConnected);
} connect(LinkManager::instance(), &LinkManager::linkDisconnected, this, &QGCToolBar::_linkDisconnected);
void QGCToolBar::globalPositionChanged(UASInterface* uas, double lat, double lon, double altAMSL, double altWGS84, quint64 usec)
{
Q_UNUSED(uas);
Q_UNUSED(lat);
Q_UNUSED(lon);
Q_UNUSED(altWGS84);
Q_UNUSED(usec);
altitudeMSL = altAMSL;
changed = true;
} }
void QGCToolBar::heartbeatTimeout(bool timeout, unsigned int ms) void QGCToolBar::heartbeatTimeout(bool timeout, unsigned int ms)
...@@ -163,36 +161,36 @@ void QGCToolBar::createUI() ...@@ -163,36 +161,36 @@ void QGCToolBar::createUI()
spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
addWidget(spacer); addWidget(spacer);
portComboBox = new QComboBox(this); _linkCombo = new QComboBox(this);
portComboBox->setToolTip(tr("Choose the COM port to use")); _linkCombo->addItem("WiFi");
portComboBox->setEnabled(true); connect(_linkCombo, SIGNAL(activated(int)), SLOT(_linkComboActivated(int)));
portComboBox->setMinimumWidth(100);
toolBarPortAction = addWidget(portComboBox); _linkCombo->setToolTip(tr("Choose the link to use"));
_linkCombo->setEnabled(true);
baudcomboBox = new QComboBox(this); _linkCombo->setMinimumWidth(100);
baudcomboBox->setToolTip(tr("Choose what baud rate to use"));
baudcomboBox->setEnabled(true); _linkComboAction = addWidget(_linkCombo);
baudcomboBox->setMinimumWidth(40);
baudcomboBox->addItem("9600", 9600); _baudCombo = new QComboBox(this);
baudcomboBox->addItem("14400", 14400); _baudCombo->setToolTip(tr("Choose what baud rate to use"));
baudcomboBox->addItem("19200", 19200); _baudCombo->setEnabled(true);
baudcomboBox->addItem("38400", 38400); _baudCombo->setMinimumWidth(40);
baudcomboBox->addItem("57600", 57600); _baudCombo->addItem("9600", 9600);
baudcomboBox->addItem("115200", 115200); _baudCombo->addItem("14400", 14400);
baudcomboBox->addItem("230400", 230400); _baudCombo->addItem("19200", 19200);
baudcomboBox->addItem("460800", 460800); _baudCombo->addItem("38400", 38400);
baudcomboBox->addItem("921600", 921600); _baudCombo->addItem("57600", 57600);
baudcomboBox->setCurrentIndex(baudcomboBox->findData(57600)); _baudCombo->addItem("115200", 115200);
toolBarBaudAction = addWidget(baudcomboBox); _baudCombo->addItem("230400", 230400);
connect(baudcomboBox, SIGNAL(activated(int)), this, SLOT(baudSelected(int))); _baudCombo->addItem("460800", 460800);
connect(portComboBox, SIGNAL(activated(int)), this, SLOT(portSelected(int))); _baudCombo->addItem("921600", 921600);
_baudCombo->setCurrentIndex(_baudCombo->findData(57600));
connectButton = new QPushButton(tr("Connect"), this); _baudComboAction = addWidget(_baudCombo);
connectButton->setObjectName("connectButton");
connectButton->setToolTip(tr("Connect wireless link to MAV")); _connectButton = new QPushButton(tr("Connect"), this);
connectButton->setCheckable(true); _connectButton->setObjectName("connectButton");
addWidget(connectButton); addWidget(_connectButton);
connect(connectButton, SIGNAL(clicked(bool)), this, SLOT(connectLink(bool))); connect(_connectButton, &QPushButton::clicked, this, &QGCToolBar::_connectButtonClicked);
resetToolbarUI(); resetToolbarUI();
...@@ -204,28 +202,9 @@ void QGCToolBar::createUI() ...@@ -204,28 +202,9 @@ void QGCToolBar::createUI()
// Configure the toolbar for the current default UAS // Configure the toolbar for the current default UAS
setActiveUAS(UASManager::instance()->getActiveUAS()); setActiveUAS(UASManager::instance()->getActiveUAS());
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*))); connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*)));
// Update label if required
if (LinkManager::instance()->getSerialLinks().count() < 1) {
connectButton->setText(tr("New Serial Link"));
toolBarPortAction->setVisible(false);
toolBarBaudAction->setVisible(false);
} else {
QList<SerialLink*> links = LinkManager::instance()->getSerialLinks();
foreach(SerialLink* slink, links) connect(&_portListTimer, &QTimer::timeout, this, &QGCToolBar::_updatePortList);
{ _portListTimer.start(500);
addLink(slink);
}
}
connect(LinkManager::instance(), SIGNAL(newLink(LinkInterface*)), this, SLOT(addLink(LinkInterface*)));
connect(LinkManager::instance(), SIGNAL(linkDeleted(LinkInterface*)), this, SLOT(removeLink(LinkInterface*)));
loadSettings();
connect(&portBoxTimer, SIGNAL(timeout()), this, SLOT(updateComboBox()));
portBoxTimer.start(500);
toolBarMessageAction->setVisible(false); toolBarMessageAction->setVisible(false);
toolBarBatteryBarAction->setVisible(false); toolBarBatteryBarAction->setVisible(false);
...@@ -259,18 +238,6 @@ void QGCToolBar::resetToolbarUI() ...@@ -259,18 +238,6 @@ void QGCToolBar::resetToolbarUI()
toolBarBatteryBarAction->setVisible(false); toolBarBatteryBarAction->setVisible(false);
} }
void QGCToolBar::baudSelected(int index)
{
Q_UNUSED(index);
userBaudChoice = true;
}
void QGCToolBar::portSelected(int index)
{
Q_UNUSED(index);
userPortChoice = true;
}
void QGCToolBar::setPerspectiveChangeActions(const QList<QAction*> &actions) void QGCToolBar::setPerspectiveChangeActions(const QList<QAction*> &actions)
{ {
if (actions.count() > 1) if (actions.count() > 1)
...@@ -372,7 +339,6 @@ void QGCToolBar::setActiveUAS(UASInterface* active) ...@@ -372,7 +339,6 @@ void QGCToolBar::setActiveUAS(UASInterface* active)
disconnect(mav, SIGNAL(batteryChanged(UASInterface*, double, double, double,int)), this, SLOT(updateBatteryRemaining(UASInterface*, double, double, double, int))); disconnect(mav, SIGNAL(batteryChanged(UASInterface*, double, double, double,int)), this, SLOT(updateBatteryRemaining(UASInterface*, double, double, double, int)));
disconnect(mav, SIGNAL(armingChanged(bool)), this, SLOT(updateArmingState(bool))); disconnect(mav, SIGNAL(armingChanged(bool)), this, SLOT(updateArmingState(bool)));
disconnect(mav, SIGNAL(heartbeatTimeout(bool, unsigned int)), this, SLOT(heartbeatTimeout(bool,unsigned int))); disconnect(mav, SIGNAL(heartbeatTimeout(bool, unsigned int)), this, SLOT(heartbeatTimeout(bool,unsigned int)));
disconnect(active, SIGNAL(globalPositionChanged(UASInterface*,double,double,double,double,quint64)), this, SLOT(globalPositionChanged(UASInterface*,double,double,double,double,quint64)));
if (mav->getWaypointManager()) if (mav->getWaypointManager())
{ {
disconnect(mav->getWaypointManager(), SIGNAL(currentWaypointChanged(quint16)), this, SLOT(updateCurrentWaypoint(quint16))); disconnect(mav->getWaypointManager(), SIGNAL(currentWaypointChanged(quint16)), this, SLOT(updateCurrentWaypoint(quint16)));
...@@ -397,7 +363,6 @@ void QGCToolBar::setActiveUAS(UASInterface* active) ...@@ -397,7 +363,6 @@ void QGCToolBar::setActiveUAS(UASInterface* active)
connect(mav, SIGNAL(batteryChanged(UASInterface*,double,double,double,int)), this, SLOT(updateBatteryRemaining(UASInterface*,double,double,double,int))); connect(mav, SIGNAL(batteryChanged(UASInterface*,double,double,double,int)), this, SLOT(updateBatteryRemaining(UASInterface*,double,double,double,int)));
connect(mav, SIGNAL(armingChanged(bool)), this, SLOT(updateArmingState(bool))); connect(mav, SIGNAL(armingChanged(bool)), this, SLOT(updateArmingState(bool)));
connect(mav, SIGNAL(heartbeatTimeout(bool, unsigned int)), this, SLOT(heartbeatTimeout(bool,unsigned int))); connect(mav, SIGNAL(heartbeatTimeout(bool, unsigned int)), this, SLOT(heartbeatTimeout(bool,unsigned int)));
connect(mav, SIGNAL(globalPositionChanged(UASInterface*,double,double,double,double,quint64)), this, SLOT(globalPositionChanged(UASInterface*,double,double,double,double,quint64)));
if (mav->getWaypointManager()) if (mav->getWaypointManager())
{ {
connect(mav->getWaypointManager(), SIGNAL(currentWaypointChanged(quint16)), this, SLOT(updateCurrentWaypoint(quint16))); connect(mav->getWaypointManager(), SIGNAL(currentWaypointChanged(quint16)), this, SLOT(updateCurrentWaypoint(quint16)));
...@@ -636,175 +601,135 @@ void QGCToolBar::receiveTextMessage(int uasid, int componentid, int severity, QS ...@@ -636,175 +601,135 @@ void QGCToolBar::receiveTextMessage(int uasid, int componentid, int severity, QS
lastSystemMessageTimeMs = QGC::groundTimeMilliseconds(); lastSystemMessageTimeMs = QGC::groundTimeMilliseconds();
} }
void QGCToolBar::addLink(LinkInterface* link) void QGCToolBar::_updatePortList(void)
{ {
// Accept only serial links as current link if (!_linkCombo->isVisible()) {
SerialLink* serial = qobject_cast<SerialLink*>(link); return;
}
if (serial && !currentLink)
{
toolBarPortAction->setVisible(true);
toolBarBaudAction->setVisible(true);
currentLink = link;
connect(currentLink, &LinkInterface::connected, this, &QGCToolBar::_linkConnected);
_updateLinkState(link->isConnected());
qDebug() << "ADD LINK"; QList<QSerialPortInfo> portList = QSerialPortInfo::availablePorts();
updateComboBox(); foreach (QSerialPortInfo portInfo, portList) {
if (_linkCombo->findText(portInfo.portName()) == -1) {
_linkCombo->addItem(portInfo.portName());
if (!_linkSelectedOnce && portInfo.vendorIdentifier() == 9900) {
// Pre-Select 3DR connection
_linkSelectedOnce = true;
_linkCombo->setCurrentIndex(_linkCombo->findText(portInfo.portName()));
}
}
} }
} }
void QGCToolBar::removeLink(LinkInterface* link) void QGCToolBar::_linkConnected(LinkInterface* link)
{ {
if (link == currentLink) { Q_UNUSED(link);
currentLink = NULL; _updateConnectButton();
}
// Try to get a new serial link
foreach (SerialLink* s, LinkManager::instance()->getSerialLinks())
{
addLink(s);
}
// Update GUI according to scan result void QGCToolBar::_linkDisconnected(LinkInterface* link)
if (currentLink) { {
_updateLinkState(currentLink->isConnected()); Q_UNUSED(link);
} else { _updateConnectButton();
connectButton->setText(tr("New Serial Link"));
portComboBox->hide();
baudcomboBox->hide();
}
}
updateComboBox();
} }
void QGCToolBar::updateComboBox()
void QGCToolBar::_updateConnectButton(void)
{ {
if (currentLink && !currentLink->isConnected()) QMenu* menu = new QMenu(this);
{
// Do not update if not visible
if (!portComboBox->isVisible())
return;
SerialLink *slink = qobject_cast<SerialLink*>(currentLink); // If there are multiple connected links add/update the connect button menu
QList<QString> portlist = slink->getCurrentPorts();
foreach (QString port, portlist)
{
if (portComboBox->findText(port) == -1)
{
portComboBox->addItem(port, port);
}
}
if (!userPortChoice) { int connectedCount = 0;
if (slink->getPortName().trimmed().length() > 0) QList<LinkInterface*> links = _linkMgr->getLinks();
{ foreach(LinkInterface* link, links) {
int portIndex = portComboBox->findData(slink->getPortName()); if (link->isConnected()) {
if (portIndex >= 0) { connectedCount++;
portComboBox->setCurrentIndex(portIndex); QAction* action = menu->addAction(link->getName());
portComboBox->setEditText(slink->getPortName()); action->setData(QVariant::fromValue((void*)link));
} connect(action, &QAction::triggered, this, &QGCToolBar::_disconnectFromMenu);
}
else
{
if (portlist.length() > 0)
{
portComboBox->setEditText(portlist.last());
}
else
{
portComboBox->setEditText(tr("No serial port found"));
}
} }
} }
if (!userBaudChoice) { // Remove old menu
int index = baudcomboBox->findData(slink->getBaudRate()); QMenu* oldMenu = _connectButton->menu();
if (index >= 0) _connectButton->setMenu(NULL);
baudcomboBox->setCurrentIndex(index); if (oldMenu) {
oldMenu->deleteLater();
} }
// Add new menu if needed
if (connectedCount > 1) {
_connectButton->setMenu(menu);
} else {
delete menu;
} }
}
void QGCToolBar::_linkConnected(void) _linksConnected = connectedCount != 0;
{
_updateLinkState(true);
}
void QGCToolBar::_linkDisconnected(void) _connectButton->setText(_linksConnected ? tr("Disconnect") : tr("Connect"));
{
_updateLinkState(false);
}
void QGCToolBar::_updateLinkState(bool connected) _linkComboAction->setVisible(!_linksConnected);
{ _baudComboAction->setVisible(!_linksConnected);
Q_UNUSED(connected); toolBarMessageAction->setVisible(_linksConnected);
if (currentLink && currentLink->isConnected() && portComboBox->isVisible()) toolBarWpAction->setVisible(_linksConnected);
{
connectButton->setText(tr("Disconnect"));
connectButton->blockSignals(true);
connectButton->setChecked(true);
connectButton->blockSignals(false);
toolBarPortAction->setVisible(false);
toolBarBaudAction->setVisible(false);
toolBarMessageAction->setVisible(true);
toolBarWpAction->setVisible(true);
}
else
{
connectButton->setText(tr("Connect"));
connectButton->blockSignals(true);
connectButton->setChecked(false);
connectButton->blockSignals(false);
toolBarPortAction->setVisible(true);
toolBarBaudAction->setVisible(true);
toolBarMessageAction->setVisible(false);
toolBarWpAction->setVisible(false);
}
} }
void QGCToolBar::connectLink(bool connectLink) void QGCToolBar::_connectButtonClicked(bool checked)
{ {
LinkManager* linkMgr = LinkManager::instance(); Q_UNUSED(checked);
Q_ASSERT(linkMgr);
// No serial port yet present if (_linksConnected) {
if (connectLink && linkMgr->getSerialLinks().count() == 0) { // Disconnect
MainWindow::instance()->addLink();
currentLink = linkMgr->getLinks().last();
} else if (connectLink) {
SerialLink *link = qobject_cast<SerialLink*>(currentLink);
if (link) { // Should be just one connected link, disconnect it
link->setPortName(portComboBox->itemData(portComboBox->currentIndex()).toString().trimmed());
int baud = baudcomboBox->currentText().toInt(); int connectedCount = 0;
link->setBaudRate(baud); LinkInterface* connectedLink = NULL;
connect(link, &LinkInterface::connected, this, &QGCToolBar::_linkConnected); QList<LinkInterface*> links = _linkMgr->getLinks();
linkMgr->connectLink(link); foreach(LinkInterface* link, links) {
if (link->isConnected()) {
connectedCount++;
connectedLink = link;
} }
} else if (!connectLink && currentLink) {
linkMgr->disconnectLink(currentLink);
disconnect(currentLink, &LinkInterface::connected, this, &QGCToolBar::_linkConnected);
} }
Q_ASSERT(connectedCount == 1);
Q_ASSERT(connectedLink);
if (currentLink) { _linkMgr->disconnectLink(connectedLink);
_updateLinkState(currentLink->isConnected()); } else {
} // Connect
}
QString linkName = _linkCombo->currentText();
void QGCToolBar::loadSettings() if (linkName == "WiFi") {
{ UDPLink* link = new UDPLink;
QSettings settings; Q_CHECK_PTR(link);
settings.beginGroup("QGC_TOOLBAR");
settings.endGroup(); _linkMgr->addLink(link);
CommConfigurationWindow* commDialog = new CommConfigurationWindow(link, this);
commDialog->exec();
} else {
// Must be a serial port
SerialLink* link = new SerialLink(linkName, _baudCombo->currentText().toInt());
Q_CHECK_PTR(link);
_linkMgr->addLink(link);
_linkMgr->connectLink(link);
}
}
} }
void QGCToolBar::storeSettings() void QGCToolBar::_disconnectFromMenu(bool checked)
{ {
QSettings settings; Q_UNUSED(checked);
settings.beginGroup("QGC_TOOLBAR");
settings.endGroup(); QAction* action = qobject_cast<QAction*>(sender());
Q_ASSERT(action);
LinkInterface* link = (LinkInterface*)(action->data().value<void *>());
Q_ASSERT(link);
_linkMgr->disconnectLink(link);
} }
void QGCToolBar::clearStatusString() void QGCToolBar::clearStatusString()
...@@ -816,7 +741,9 @@ void QGCToolBar::clearStatusString() ...@@ -816,7 +741,9 @@ void QGCToolBar::clearStatusString()
} }
} }
QGCToolBar::~QGCToolBar() void QGCToolBar::_linkComboActivated(int index)
{ {
storeSettings(); Q_UNUSED(index);
_linkSelectedOnce = true;
} }
...@@ -32,8 +32,10 @@ This file is part of the QGROUNDCONTROL project ...@@ -32,8 +32,10 @@ This file is part of the QGROUNDCONTROL project
#include <QProgressBar> #include <QProgressBar>
#include <QComboBox> #include <QComboBox>
#include <QTimer> #include <QTimer>
#include "UASInterface.h" #include "UASInterface.h"
#include "SerialLink.h" #include "SerialLink.h"
#include "LinkManager.h"
class QGCToolBar : public QToolBar class QGCToolBar : public QToolBar
{ {
...@@ -43,15 +45,10 @@ public: ...@@ -43,15 +45,10 @@ public:
explicit QGCToolBar(QWidget* parent = 0); explicit QGCToolBar(QWidget* parent = 0);
void setPerspectiveChangeActions(const QList<QAction*> &action); void setPerspectiveChangeActions(const QList<QAction*> &action);
void setPerspectiveChangeAdvancedActions(const QList<QAction*> &action); void setPerspectiveChangeAdvancedActions(const QList<QAction*> &action);
~QGCToolBar();
public slots: public slots:
/** @brief Set the system that is currently displayed by this widget */ /** @brief Set the system that is currently displayed by this widget */
void setActiveUAS(UASInterface* active); void setActiveUAS(UASInterface* active);
/** @brief Set the link which is currently handled with connecting / disconnecting */
void addLink(LinkInterface* link);
/** @brief Remove link which is currently handled */
void removeLink(LinkInterface* link);
/** @brief Set the system state */ /** @brief Set the system state */
void updateState(UASInterface* system, QString name, QString description); void updateState(UASInterface* system, QString name, QString description);
/** @brief Set the system mode */ /** @brief Set the system mode */
...@@ -74,31 +71,12 @@ public slots: ...@@ -74,31 +71,12 @@ public slots:
void updateView(); void updateView();
/** @brief Update connection timeout time */ /** @brief Update connection timeout time */
void heartbeatTimeout(bool timeout, unsigned int ms); void heartbeatTimeout(bool timeout, unsigned int ms);
/** @brief Update global position */
void globalPositionChanged(UASInterface* uas, double lat, double lon, double altAMSL, double altWGS84, quint64 usec);
/** @brief Create or connect link */
void connectLink(bool connect);
/** @brief Clear status string */ /** @brief Clear status string */
void clearStatusString(); void clearStatusString();
/** @brief Set an activity action as checked in menu */ /** @brief Set an activity action as checked in menu */
void advancedActivityTriggered(QAction* action); void advancedActivityTriggered(QAction* action);
void updateComboBox();
/**
* @brief User selected baud rate
* @param index The current index of the combo box
*/
void baudSelected(int index);
/**
* @brief User selected port
* @param index The current index of the combo box
*/
void portSelected(int index);
protected: protected:
void storeSettings();
void loadSettings();
void createUI(); void createUI();
void resetToolbarUI(); void resetToolbarUI();
UASInterface* mav; UASInterface* mav;
...@@ -107,8 +85,6 @@ protected: ...@@ -107,8 +85,6 @@ protected:
QLabel* toolBarTimeoutLabel; QLabel* toolBarTimeoutLabel;
QAction* toolBarTimeoutAction; ///< Needed to set label (in)visible. QAction* toolBarTimeoutAction; ///< Needed to set label (in)visible.
QAction* toolBarMessageAction; QAction* toolBarMessageAction;
QAction* toolBarPortAction;
QAction* toolBarBaudAction;
QAction* toolBarWpAction; QAction* toolBarWpAction;
QAction* toolBarBatteryBarAction; QAction* toolBarBatteryBarAction;
QAction* toolBarBatteryVoltageAction; QAction* toolBarBatteryVoltageAction;
...@@ -117,21 +93,14 @@ protected: ...@@ -117,21 +93,14 @@ protected:
QLabel* toolBarStateLabel; QLabel* toolBarStateLabel;
QLabel* toolBarWpLabel; QLabel* toolBarWpLabel;
QLabel* toolBarMessageLabel; QLabel* toolBarMessageLabel;
QPushButton* connectButton;
QProgressBar* toolBarBatteryBar; QProgressBar* toolBarBatteryBar;
QLabel* toolBarBatteryVoltageLabel; QLabel* toolBarBatteryVoltageLabel;
QComboBox *portComboBox;
QComboBox *baudcomboBox;
QTimer portBoxTimer;
bool userBaudChoice;
bool userPortChoice;
bool changed; bool changed;
float batteryPercent; float batteryPercent;
float batteryVoltage; float batteryVoltage;
int wpId; int wpId;
double wpDistance; double wpDistance;
float altitudeMSL;
float altitudeRel; float altitudeRel;
QString state; QString state;
QString mode; QString mode;
...@@ -146,12 +115,28 @@ protected: ...@@ -146,12 +115,28 @@ protected:
QButtonGroup *group; QButtonGroup *group;
private slots: private slots:
void _linkConnected(void); void _linkConnected(LinkInterface* link);
void _linkDisconnected(void); void _linkDisconnected(LinkInterface* link);
void _disconnectFromMenu(bool checked);
void _connectButtonClicked(bool checked);
void _linkComboActivated(int index);
private: private:
/** @brief Update the link state */ void _updateConnectButton(void);
void _updateLinkState(bool connected); void _updatePortList(void);
LinkManager* _linkMgr;
QComboBox* _linkCombo;
QAction* _linkComboAction;
bool _linkSelectedOnce;
QTimer _portListTimer;
QComboBox* _baudCombo;
QAction* _baudComboAction;
QPushButton* _connectButton;
bool _linksConnected;
}; };
#endif // QGCTOOLBAR_H #endif // QGCTOOLBAR_H
...@@ -76,15 +76,6 @@ _ui(new Ui::SettingsDialog) ...@@ -76,15 +76,6 @@ _ui(new Ui::SettingsDialog)
connect(_ui->deleteSettings, &QAbstractButton::toggled, this, &SettingsDialog::_deleteSettingsToggled); connect(_ui->deleteSettings, &QAbstractButton::toggled, this, &SettingsDialog::_deleteSettingsToggled);
// Custom mode
_ui->customModeComboBox->addItem(tr("Default: Generic MAVLink and serial links"), MainWindow::CUSTOM_MODE_NONE);
_ui->customModeComboBox->addItem(tr("Wifi: Generic MAVLink, wifi or serial links"), MainWindow::CUSTOM_MODE_WIFI);
_ui->customModeComboBox->addItem(tr("PX4: Optimized for PX4 Autopilot Users"), MainWindow::CUSTOM_MODE_PX4);
_ui->customModeComboBox->setCurrentIndex(_ui->customModeComboBox->findData(_mainWindow->getCustomMode()));
connect(_ui->customModeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectCustomMode(int)));
// Application color style // Application color style
_ui->styleChooser->setCurrentIndex(qgcApp()->styleIsDark() ? 0 : 1); _ui->styleChooser->setCurrentIndex(qgcApp()->styleIsDark() ? 0 : 1);
...@@ -107,11 +98,6 @@ void SettingsDialog::styleChanged(int index) ...@@ -107,11 +98,6 @@ void SettingsDialog::styleChanged(int index)
qgcApp()->setStyle(index == 0); qgcApp()->setStyle(index == 0);
} }
void SettingsDialog::selectCustomMode(int mode)
{
_mainWindow->setCustomMode(static_cast<enum MainWindow::CUSTOM_MODE>(_ui->customModeComboBox->itemData(mode).toInt()));
}
void SettingsDialog::_deleteSettingsToggled(bool checked) void SettingsDialog::_deleteSettingsToggled(bool checked)
{ {
if (checked){ if (checked){
......
...@@ -40,11 +40,10 @@ public: ...@@ -40,11 +40,10 @@ public:
SettingsDialog(JoystickInput *joystick, QWidget *parent = 0, Qt::WindowFlags flags = Qt::Sheet); SettingsDialog(JoystickInput *joystick, QWidget *parent = 0, Qt::WindowFlags flags = Qt::Sheet);
~SettingsDialog(); ~SettingsDialog();
public slots: public slots:
void styleChanged(int index); void styleChanged(int index);
void selectCustomMode(int mode);
private slots: private slots:
void _deleteSettingsToggled(bool checked); void _deleteSettingsToggled(bool checked);
void _selectSavedFilesDirectory(void); void _selectSavedFilesDirectory(void);
void _validateBeforeClose(void); void _validateBeforeClose(void);
......
...@@ -79,9 +79,6 @@ ...@@ -79,9 +79,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QComboBox" name="customModeComboBox"/>
</item>
<item> <item>
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment