Commit ab7869ce authored by Mariano Lizarraga's avatar Mariano Lizarraga

Merge branch 'experimental' of git@github.com:pixhawk/qgroundcontrol into mergeRemote

parents 1059752a cf1558b0
...@@ -249,7 +249,8 @@ HEADERS += src/MG.h \ ...@@ -249,7 +249,8 @@ HEADERS += src/MG.h \
src/ui/SlugsHilSim.h \ src/ui/SlugsHilSim.h \
src/ui/SlugsPIDControl.h \ src/ui/SlugsPIDControl.h \
src/ui/SlugsVideoCamControl.h \ src/ui/SlugsVideoCamControl.h \
src/ui/SlugsPadCameraControl.h src/ui/SlugsPadCameraControl.h \
src/ui/QGCMainWindowAPConfigurator.h
contains(DEPENDENCIES_PRESENT, osg) { contains(DEPENDENCIES_PRESENT, osg) {
message("Including headers for OpenSceneGraph") message("Including headers for OpenSceneGraph")
...@@ -359,7 +360,8 @@ SOURCES += src/main.cc \ ...@@ -359,7 +360,8 @@ SOURCES += src/main.cc \
src/ui/SlugsHilSim.cc \ src/ui/SlugsHilSim.cc \
src/ui/SlugsPIDControl.cpp \ src/ui/SlugsPIDControl.cpp \
src/ui/SlugsVideoCamControl.cpp \ src/ui/SlugsVideoCamControl.cpp \
src/ui/SlugsPadCameraControl.cpp src/ui/SlugsPadCameraControl.cpp \
src/ui/QGCMainWindowAPConfigurator.cc
contains(DEPENDENCIES_PRESENT, osg) { contains(DEPENDENCIES_PRESENT, osg) {
message("Including sources for OpenSceneGraph") message("Including sources for OpenSceneGraph")
......
...@@ -157,6 +157,9 @@ Core::Core(int &argc, char* argv[]) : QApplication(argc, argv) ...@@ -157,6 +157,9 @@ Core::Core(int &argc, char* argv[]) : QApplication(argc, argv)
**/ **/
Core::~Core() Core::~Core()
{ {
//mainWindow->storeSettings();
mainWindow->hide();
mainWindow->deleteLater();
// Delete singletons // Delete singletons
delete LinkManager::instance(); delete LinkManager::instance();
delete UASManager::instance(); delete UASManager::instance();
......
...@@ -14,6 +14,9 @@ namespace QGC ...@@ -14,6 +14,9 @@ namespace QGC
/** @brief Get the current ground time in microseconds */ /** @brief Get the current ground time in microseconds */
quint64 groundTimeUsecs(); quint64 groundTimeUsecs();
const QString APPNAME = "QGROUNDCONTROL";
const QString COMPANYNAME = "OPENMAV";
} }
#endif // QGC_H #endif // QGC_H
...@@ -32,6 +32,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -32,6 +32,7 @@ This file is part of the QGROUNDCONTROL project
#include <QList> #include <QList>
#include <QApplication> #include <QApplication>
#include "LinkManager.h" #include "LinkManager.h"
#include <iostream>
#include <QDebug> #include <QDebug>
...@@ -65,6 +66,7 @@ LinkManager::~LinkManager() ...@@ -65,6 +66,7 @@ LinkManager::~LinkManager()
void LinkManager::add(LinkInterface* link) void LinkManager::add(LinkInterface* link)
{ {
if(!link) return;
links.append(link); links.append(link);
emit newLink(link); emit newLink(link);
} }
...@@ -73,6 +75,7 @@ void LinkManager::addProtocol(LinkInterface* link, ProtocolInterface* protocol) ...@@ -73,6 +75,7 @@ void LinkManager::addProtocol(LinkInterface* link, ProtocolInterface* protocol)
{ {
// Connect link to protocol // Connect link to protocol
// the protocol will receive new bytes from the link // the protocol will receive new bytes from the link
if(!link || !protocol) return;
connect(link, SIGNAL(bytesReceived(LinkInterface*, QByteArray)), protocol, SLOT(receiveBytes(LinkInterface*, QByteArray))); connect(link, SIGNAL(bytesReceived(LinkInterface*, QByteArray)), protocol, SLOT(receiveBytes(LinkInterface*, QByteArray)));
// Store the connection information in the protocol links map // Store the connection information in the protocol links map
protocolLinks.insertMulti(protocol, link); protocolLinks.insertMulti(protocol, link);
...@@ -91,7 +94,8 @@ bool LinkManager::connectAll() ...@@ -91,7 +94,8 @@ bool LinkManager::connectAll()
foreach (LinkInterface* link, links) foreach (LinkInterface* link, links)
{ {
if(! link->connect()) allConnected = false; if(!link) {}
else if(!link->connect()) allConnected = false;
} }
return allConnected; return allConnected;
...@@ -103,7 +107,9 @@ bool LinkManager::disconnectAll() ...@@ -103,7 +107,9 @@ bool LinkManager::disconnectAll()
foreach (LinkInterface* link, links) foreach (LinkInterface* link, links)
{ {
if(! link->disconnect()) allDisconnected = false; //static int i=0;
if(!link){}
else if(!link->disconnect()) allDisconnected = false;
} }
return allDisconnected; return allDisconnected;
...@@ -111,14 +117,32 @@ bool LinkManager::disconnectAll() ...@@ -111,14 +117,32 @@ bool LinkManager::disconnectAll()
bool LinkManager::connectLink(LinkInterface* link) bool LinkManager::connectLink(LinkInterface* link)
{ {
if(!link) return false;
return link->connect(); return link->connect();
} }
bool LinkManager::disconnectLink(LinkInterface* link) bool LinkManager::disconnectLink(LinkInterface* link)
{ {
if(!link) return false;
return link->disconnect(); return link->disconnect();
} }
bool LinkManager::removeLink(LinkInterface* link)
{
if(link)
{
for (int i=0; i < QList<LinkInterface*>(links).size(); i++)
{
if(link==links.at(i))
{
links.removeAt(i); //remove from link list
}
}
return true;
}
return false;
}
/** /**
* The access time is linear in the number of links. * The access time is linear in the number of links.
* *
......
...@@ -67,6 +67,8 @@ public slots: ...@@ -67,6 +67,8 @@ public slots:
void add(LinkInterface* link); void add(LinkInterface* link);
void addProtocol(LinkInterface* link, ProtocolInterface* protocol); void addProtocol(LinkInterface* link, ProtocolInterface* protocol);
bool removeLink(LinkInterface* link);
bool connectAll(); bool connectAll();
bool connectLink(LinkInterface* link); bool connectLink(LinkInterface* link);
......
...@@ -559,16 +559,17 @@ void MAVLinkSimulationLink::mainloop() ...@@ -559,16 +559,17 @@ void MAVLinkSimulationLink::mainloop()
// Send controller states // Send controller states
// uint8_t attControl = 1;
// uint8_t posXYControl = 1;
// uint8_t posZControl = 0;
// uint8_t posYawControl = 1;
// uint8_t gpsLock = 2;
// uint8_t visLock = 3;
//uint8_t posLock = qMax(gpsLock, visLock);
#ifdef MAVLINK_ENABLED_PIXHAWK #ifdef MAVLINK_ENABLED_PIXHAWK
uint8_t attControl = 1;
uint8_t posXYControl = 1;
uint8_t posZControl = 0;
uint8_t posYawControl = 1;
uint8_t gpsLock = 2;
uint8_t visLock = 3;
uint8_t posLock = qMax(gpsLock, visLock);
messageSize = mavlink_msg_control_status_pack(systemId, componentId, &msg, posLock, visLock, gpsLock, attControl, posXYControl, posZControl, posYawControl); messageSize = mavlink_msg_control_status_pack(systemId, componentId, &msg, posLock, visLock, gpsLock, attControl, posXYControl, posZControl, posYawControl);
#endif #endif
......
...@@ -30,10 +30,13 @@ This file is part of the QGROUNDCONTROL project ...@@ -30,10 +30,13 @@ This file is part of the QGROUNDCONTROL project
#include <QTimer> #include <QTimer>
#include <QDebug> #include <QDebug>
#include <QSettings>
#include <QMutexLocker> #include <QMutexLocker>
#include "SerialLink.h" #include "SerialLink.h"
#include "LinkManager.h" #include "LinkManager.h"
#include "QGC.h"
#include <MG.h> #include <MG.h>
#include <iostream>
#ifdef _WIN32 #ifdef _WIN32
#include "windows.h" #include "windows.h"
#endif #endif
...@@ -54,12 +57,41 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P ...@@ -54,12 +57,41 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
#endif #endif
// Set unique ID and add link to the list of links // Set unique ID and add link to the list of links
this->id = getNextLinkId(); this->id = getNextLinkId();
this->baudrate = baudrate;
this->flow = flow; // Load defaults from settings
this->parity = parity; QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
this->dataBits = dataBits; settings.sync();
this->stopBits = stopBits; if (settings.contains("SERIALLINK_COMM_PORT"))
this->timeout = 1; ///< The timeout controls how long the program flow should wait for new serial bytes. As we're polling, we don't want to wait at all. {
this->porthandle = settings.value("SERIALLINK_COMM_PORT").toString();
}
// *nix (Linux, MacOS tested) serial port support
port = new QextSerialPort(porthandle, QextSerialPort::Polling);
//port = new QextSerialPort(porthandle, QextSerialPort::EventDriven);
if (settings.contains("SERIALLINK_COMM_PORT"))
{
setBaudRate(settings.value("SERIALLINK_COMM_BAUD").toInt());
setParityType(settings.value("SERIALLINK_COMM_PARITY").toInt());
setStopBitsType(settings.value("SERIALLINK_COMM_STOPBITS").toInt());
setDataBitsType(settings.value("SERIALLINK_COMM_DATABITS").toInt());
}
else
{
this->baudrate = baudrate;
this->flow = flow;
this->parity = parity;
this->dataBits = dataBits;
this->stopBits = stopBits;
this->timeout = 1; ///< The timeout controls how long the program flow should wait for new serial bytes. As we're polling, we don't want to wait at all.
}
port->setTimeout(timeout); // Timeout of 0 ms, we don't want to wait for data, we just poll again next time
port->setBaudRate(baudrate);
port->setFlowControl(flow);
port->setParity(parity);
port->setDataBits(dataBits);
port->setStopBits(stopBits);
// Set the port name // Set the port name
if (porthandle == "") if (porthandle == "")
...@@ -88,15 +120,7 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P ...@@ -88,15 +120,7 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
//some other error occurred. Inform user. //some other error occurred. Inform user.
} }
#else #else
// *nix (Linux, MacOS tested) serial port support
port = new QextSerialPort(porthandle, QextSerialPort::Polling);
//port = new QextSerialPort(porthandle, QextSerialPort::EventDriven);
port->setTimeout(timeout); // Timeout of 0 ms, we don't want to wait for data, we just poll again next time
port->setBaudRate(baudrate);
port->setFlowControl(flow);
port->setParity(parity);
port->setDataBits(dataBits);
port->setStopBits(stopBits);
#endif #endif
// Link is setup, register it with link manager // Link is setup, register it with link manager
...@@ -106,7 +130,7 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P ...@@ -106,7 +130,7 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
SerialLink::~SerialLink() SerialLink::~SerialLink()
{ {
disconnect(); disconnect();
delete port; if(port) delete port;
port = NULL; port = NULL;
} }
...@@ -239,6 +263,8 @@ bool SerialLink::disconnect() ...@@ -239,6 +263,8 @@ bool SerialLink::disconnect()
port->close(); port->close();
dataMutex.unlock(); dataMutex.unlock();
if(this->isRunning()) this->terminate(); //stop running the thread, restart it upon connect
bool closed = true; bool closed = true;
//port->isOpen(); //port->isOpen();
...@@ -298,6 +324,15 @@ bool SerialLink::hardwareConnect() ...@@ -298,6 +324,15 @@ bool SerialLink::hardwareConnect()
if(connectionUp) { if(connectionUp) {
emit connected(); emit connected();
emit connected(true); emit connected(true);
// Store settings
QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
settings.setValue("SERIALLINK_COMM_PORT", this->porthandle);
settings.setValue("SERIALLINK_COMM_BAUD", getBaudRate());
settings.setValue("SERIALLINK_COMM_PARITY", getParityType());
settings.setValue("SERIALLINK_COMM_STOPBITS", getStopBitsType());
settings.setValue("SERIALLINK_COMM_DATABITS", getDataBitsType());
settings.sync();
} }
return connectionUp; return connectionUp;
...@@ -311,7 +346,14 @@ bool SerialLink::hardwareConnect() ...@@ -311,7 +346,14 @@ bool SerialLink::hardwareConnect()
**/ **/
bool SerialLink::isConnected() bool SerialLink::isConnected()
{ {
return port->isOpen(); if (port)
{
return port->isOpen();
}
else
{
return false;
}
} }
int SerialLink::getId() int SerialLink::getId()
...@@ -516,7 +558,7 @@ bool SerialLink::setPortName(QString portName) ...@@ -516,7 +558,7 @@ bool SerialLink::setPortName(QString portName)
this->porthandle = "\\\\.\\" + this->porthandle; this->porthandle = "\\\\.\\" + this->porthandle;
} }
#endif #endif
delete port; if(port) delete port;
port = new QextSerialPort(porthandle, QextSerialPort::Polling); port = new QextSerialPort(porthandle, QextSerialPort::Polling);
port->setBaudRate(baudrate); port->setBaudRate(baudrate);
...@@ -707,9 +749,16 @@ bool SerialLink::setBaudRate(int rate) ...@@ -707,9 +749,16 @@ bool SerialLink::setBaudRate(int rate)
break; break;
} }
port->setBaudRate(this->baudrate); if (port)
if(reconnect) connect(); {
return accepted; port->setBaudRate(this->baudrate);
if(reconnect) connect();
return accepted;
}
else
{
return false;
}
} }
bool SerialLink::setFlowType(int flow) bool SerialLink::setFlowType(int flow)
......
...@@ -341,7 +341,7 @@ Freenect::readConfigFile(void) ...@@ -341,7 +341,7 @@ Freenect::readConfigFile(void)
settings.value("transform/R33").toDouble(), settings.value("transform/R33").toDouble(),
settings.value("transform/Tz").toDouble(), settings.value("transform/Tz").toDouble(),
0.0, 0.0, 0.0, 1.0); 0.0, 0.0, 0.0, 1.0);
transformMatrix = transformMatrix.transposed(); transformMatrix = transformMatrix.inverted();
baseline = settings.value("transform/baseline").toDouble(); baseline = settings.value("transform/baseline").toDouble();
disparityOffset = settings.value("transform/disparity_offset").toDouble(); disparityOffset = settings.value("transform/disparity_offset").toDouble();
......
...@@ -41,12 +41,12 @@ void PxQuadMAV::receiveMessage(LinkInterface* link, mavlink_message_t message) ...@@ -41,12 +41,12 @@ void PxQuadMAV::receiveMessage(LinkInterface* link, mavlink_message_t message)
{ {
// Let UAS handle the default message set // Let UAS handle the default message set
UAS::receiveMessage(link, message); UAS::receiveMessage(link, message);
// mavlink_message_t* msg = &message;
//qDebug() << "PX RECEIVED" << msg->sysid << msg->compid << msg->msgid; //qDebug() << "PX RECEIVED" << msg->sysid << msg->compid << msg->msgid;
// Only compile this portion if matching MAVLink packets have been compiled // Only compile this portion if matching MAVLink packets have been compiled
#ifdef MAVLINK_ENABLED_PIXHAWK #ifdef MAVLINK_ENABLED_PIXHAWK
mavlink_message_t* msg = &message;
if (message.sysid == uasId) if (message.sysid == uasId)
{ {
......
...@@ -95,6 +95,7 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(), ...@@ -95,6 +95,7 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(),
UAS::~UAS() UAS::~UAS()
{ {
delete links; delete links;
links=NULL;
} }
int UAS::getUASID() const int UAS::getUASID() const
...@@ -126,6 +127,7 @@ void UAS::setSelected() ...@@ -126,6 +127,7 @@ void UAS::setSelected()
void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message) void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
{ {
if (!link) return;
if (!links->contains(link)) if (!links->contains(link))
{ {
addLink(link); addLink(link);
...@@ -371,11 +373,6 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message) ...@@ -371,11 +373,6 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
GAudioOutput::instance()->notifyPositive(); GAudioOutput::instance()->notifyPositive();
} }
positionLock = true; positionLock = true;
// Send to patch antenna
mavlink_message_t msg;
mavlink_msg_global_position_pack(MG::SYSTEM::ID, MG::SYSTEM::COMPID, &msg, pos.usec, pos.lat, pos.lon, pos.alt, pos.vx, pos.vy, pos.vz);
sendMessage(msg);
} }
break; break;
case MAVLINK_MSG_ID_GPS_RAW: case MAVLINK_MSG_ID_GPS_RAW:
...@@ -839,6 +836,7 @@ void UAS::sendMessage(mavlink_message_t message) ...@@ -839,6 +836,7 @@ void UAS::sendMessage(mavlink_message_t message)
void UAS::sendMessage(LinkInterface* link, mavlink_message_t message) void UAS::sendMessage(LinkInterface* link, mavlink_message_t message)
{ {
if(!link) return;
// Create buffer // Create buffer
uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
// Write message into buffer, prepending start sign // Write message into buffer, prepending start sign
......
...@@ -85,6 +85,11 @@ void UASManager::addUAS(UASInterface* uas) ...@@ -85,6 +85,11 @@ void UASManager::addUAS(UASInterface* uas)
} }
} }
QList<UASInterface*> UASManager::getUASList()
{
return systems.values();
}
UASInterface* UASManager::getActiveUAS() UASInterface* UASManager::getActiveUAS()
{ {
if(!activeUAS) if(!activeUAS)
......
...@@ -69,6 +69,8 @@ public: ...@@ -69,6 +69,8 @@ public:
**/ **/
UASInterface* getUASForId(int id); UASInterface* getUASForId(int id);
QList<UASInterface*> getUASList();
public slots: public slots:
......
...@@ -47,6 +47,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -47,6 +47,7 @@ This file is part of the QGROUNDCONTROL project
#endif #endif
#include "MAVLinkProtocol.h" #include "MAVLinkProtocol.h"
#include "MAVLinkSettingsWidget.h" #include "MAVLinkSettingsWidget.h"
#include "LinkManager.h"
CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolInterface* protocol, QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags) CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolInterface* protocol, QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags)
{ {
...@@ -58,6 +59,10 @@ CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolIn ...@@ -58,6 +59,10 @@ CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolIn
// add link types // add link types
ui.linkType->addItem("Serial",QGC_LINK_SERIAL); ui.linkType->addItem("Serial",QGC_LINK_SERIAL);
ui.linkType->addItem("UDP",QGC_LINK_UDP); ui.linkType->addItem("UDP",QGC_LINK_UDP);
ui.linkType->addItem("Simulation",QGC_LINK_SIMULATION);
ui.linkType->addItem("Serial Forwarding",QGC_LINK_FORWARDING);
ui.connectionType->addItem("MAVLink", QGC_PROTOCOL_MAVLINK);
// Create action to open this menu // Create action to open this menu
// Create configuration action for this link // Create configuration action for this link
...@@ -195,11 +200,20 @@ void CommConfigurationWindow::setLinkName(QString name) ...@@ -195,11 +200,20 @@ void CommConfigurationWindow::setLinkName(QString name)
void CommConfigurationWindow::remove() void CommConfigurationWindow::remove()
{ {
link->disconnect(); if(action) delete action; //delete action first since it has a pointer to link
//delete link; action=NULL;
//delete action;
if(link)
{
LinkManager::instance()->removeLink(link); //remove link from LinkManager list
link->disconnect(); //disconnect port, and also calls terminate() to stop the thread
if (link->isRunning()) link->terminate(); // terminate() the serial thread just in case it is still running
link->wait(); // wait() until thread is stoped before deleting
delete link;
}
link=NULL;
this->window()->close(); this->window()->close();
qDebug() << "TODO: Link cannot be deleted: CommConfigurationWindow::remove() NOT IMPLEMENTED!";
} }
void CommConfigurationWindow::connectionState(bool connect) void CommConfigurationWindow::connectionState(bool connect)
......
...@@ -42,7 +42,14 @@ This file is part of the QGROUNDCONTROL project ...@@ -42,7 +42,14 @@ This file is part of the QGROUNDCONTROL project
enum qgc_link_t enum qgc_link_t
{ {
QGC_LINK_SERIAL, QGC_LINK_SERIAL,
QGC_LINK_UDP QGC_LINK_UDP,
QGC_LINK_SIMULATION,
QGC_LINK_FORWARDING
};
enum qgc_protocol_t
{
QGC_PROTOCOL_MAVLINK
}; };
#ifdef OPAL_RT #ifdef OPAL_RT
......
...@@ -43,23 +43,7 @@ ...@@ -43,23 +43,7 @@
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QComboBox" name="linkType"> <widget class="QComboBox" name="linkType"/>
<item>
<property name="text">
<string>Serial Link</string>
</property>
</item>
<item>
<property name="text">
<string>UDP</string>
</property>
</item>
<item>
<property name="text">
<string>Simulation</string>
</property>
</item>
</widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
...@@ -71,13 +55,8 @@ ...@@ -71,13 +55,8 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QComboBox" name="connectionType"> <widget class="QComboBox" name="connectionType">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>-1</number>
</property> </property>
<item>
<property name="text">
<string>MAVLink</string>
</property>
</item>
</widget> </widget>
</item> </item>
</layout> </layout>
......
...@@ -165,6 +165,19 @@ HUD::~HUD() ...@@ -165,6 +165,19 @@ HUD::~HUD()
} }
void HUD::showEvent(QShowEvent* event)
{
Q_UNUSED(event);
if (isVisible())
{
refreshTimer->start();
}
else
{
refreshTimer->stop();
}
}
void HUD::start() void HUD::start()
{ {
refreshTimer->start(); refreshTimer->start();
......
...@@ -123,6 +123,8 @@ protected: ...@@ -123,6 +123,8 @@ protected:
float refLineWidthToPen(float line); float refLineWidthToPen(float line);
/** @brief Rotate a polygon around a point clockwise */ /** @brief Rotate a polygon around a point clockwise */
void rotatePolygonClockWiseRad(QPolygonF& p, float angle, QPointF origin); void rotatePolygonClockWiseRad(QPolygonF& p, float angle, QPointF origin);
/** @brief Override base class show */
virtual void showEvent(QShowEvent* event);
QImage* image; ///< Double buffer image QImage* image; ///< Double buffer image
QImage glImage; ///< The background / camera image QImage glImage; ///< The background / camera image
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <QHostInfo> #include <QHostInfo>
#include "MG.h" #include "MG.h"
#include "QGC.h"
#include "MAVLinkSimulationLink.h" #include "MAVLinkSimulationLink.h"
#include "SerialLink.h" #include "SerialLink.h"
#include "UDPLink.h" #include "UDPLink.h"
...@@ -82,6 +83,33 @@ MainWindow::MainWindow(QWidget *parent): ...@@ -82,6 +83,33 @@ MainWindow::MainWindow(QWidget *parent):
// Adjust the size // Adjust the size
adjustSize(); adjustSize();
// Load previous widget setup
// FIXME WORK IN PROGRESS
QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
if (dockwidgets.size())
{
settings.beginGroup("mainwindow/dockwidgets");
for (int i = 0; i < dockwidgets.size(); ++i)
{
QDockWidget *dockWidget = dockwidgets.at(i);
if (dockWidget->parentWidget() == this)
{
if (settings.contains(dockWidget->windowTitle()))
{
dockWidget->setVisible(settings.value(dockWidget->windowTitle(), dockWidget->isVisible()).toBool());
}
}
}
settings.endGroup();
}
this->show();
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
...@@ -127,6 +155,110 @@ void MainWindow::buildCommonWidgets() ...@@ -127,6 +155,110 @@ void MainWindow::buildCommonWidgets()
} }
//=======
//void MainWindow::storeSettings()
//{
// QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
// QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
// if (dockwidgets.size())
// {
// settings.beginGroup("mainwindow/dockwidgets");
// for (int i = 0; i < dockwidgets.size(); ++i)
// {
// QDockWidget *dockWidget = dockwidgets.at(i);
// if (dockWidget->parentWidget() == this)
// {
// settings.setValue(dockWidget->windowTitle(), QVariant(dockWidget->isVisible()));
// }
// }
// settings.endGroup();
// }
// settings.sync();
//}
//QMenu* MainWindow::createCenterWidgetMenu()
//{
// QMenu* menu = NULL;
// QStackedWidget* centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
// if (centerStack)
// {
// if (centerStack->count() > 0)
// {
// menu = new QMenu(this);
// for (int i = 0; i < centerStack->count(); ++i)
// {
// //menu->addAction(centerStack->widget(i)->actions())
// }
// }
// }
// return menu;
//}
//QMenu* MainWindow::createDockWidgetMenu()
//{
// QMenu *menu = 0;
//#ifndef QT_NO_DOCKWIDGET
// QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
// if (dockwidgets.size())
// {
// menu = new QMenu(this);
// for (int i = 0; i < dockwidgets.size(); ++i)
// {
// QDockWidget *dockWidget = dockwidgets.at(i);
// if (dockWidget->parentWidget() == this)
// {
// menu->addAction(dockwidgets.at(i)->toggleViewAction());
// }
// }
// menu->addSeparator();
// }
//#endif
// return menu;
//}
////QList<QWidget* >* MainWindow::getMainWidgets()
////{
////}
////QMenu* QMainWindow::getDockWidgetMenu()
////{
//// Q_D(QMainWindow);
//// QMenu *menu = 0;
////#ifndef QT_NO_DOCKWIDGET
//// QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
//// if (dockwidgets.size()) {
//// menu = new QMenu(this);
//// for (int i = 0; i < dockwidgets.size(); ++i) {
//// QDockWidget *dockWidget = dockwidgets.at(i);
//// if (dockWidget->parentWidget() == this
//// && d->layout->contains(dockWidget)) {
//// menu->addAction(dockwidgets.at(i)->toggleViewAction());
//// }
//// }
//// menu->addSeparator();
//// }
////#endif // QT_NO_DOCKWIDGET
////#ifndef QT_NO_TOOLBAR
//// QList<QToolBar *> toolbars = qFindChildren<QToolBar *>(this);
//// if (toolbars.size()) {
//// if (!menu)
//// menu = new QMenu(this);
//// for (int i = 0; i < toolbars.size(); ++i) {
//// QToolBar *toolBar = toolbars.at(i);
//// if (toolBar->parentWidget() == this
//// && d->layout->contains(toolBar)) {
//// menu->addAction(toolbars.at(i)->toggleViewAction());
//// }
//// }
//// }
////#endif
//// Q_UNUSED(d);
//// return menu;
////}
//>>>>>>> master
void MainWindow::buildPxWidgets() void MainWindow::buildPxWidgets()
{ {
//FIXME: memory of acceptList will never be freed again //FIXME: memory of acceptList will never be freed again
...@@ -172,6 +304,7 @@ void MainWindow::buildPxWidgets() ...@@ -172,6 +304,7 @@ void MainWindow::buildPxWidgets()
#endif #endif
// Dock widgets // Dock widgets
detectionDockWidget = new QDockWidget(tr("Object Recognition"), this); detectionDockWidget = new QDockWidget(tr("Object Recognition"), this);
detectionDockWidget->setWidget( new ObjectDetectionView("images/patterns", this) ); detectionDockWidget->setWidget( new ObjectDetectionView("images/patterns", this) );
addToToolsMenu (detectionDockWidget, tr("Object Recognition"), SLOT(showToolWidget()), MENU_DETECTION, Qt::RightDockWidgetArea); addToToolsMenu (detectionDockWidget, tr("Object Recognition"), SLOT(showToolWidget()), MENU_DETECTION, Qt::RightDockWidgetArea);
...@@ -189,9 +322,53 @@ void MainWindow::buildPxWidgets() ...@@ -189,9 +322,53 @@ void MainWindow::buildPxWidgets()
hsiDockWidget = new QDockWidget(tr("Horizontal Situation Indicator"), this); hsiDockWidget = new QDockWidget(tr("Horizontal Situation Indicator"), this);
hsiDockWidget->setWidget( new HSIDisplay(this) ); hsiDockWidget->setWidget( new HSIDisplay(this) );
addToToolsMenu (hsiDockWidget, tr("HSI"), SLOT(showToolWidget()), MENU_HSI, Qt::BottomDockWidgetArea); addToToolsMenu (hsiDockWidget, tr("HSI"), SLOT(showToolWidget()), MENU_HSI, Qt::BottomDockWidgetArea);
//=======
headDown1DockWidget = new QDockWidget(tr("Primary Flight Display"), this); // controlDockWidget = new QDockWidget(tr("Control"), this);
// controlDockWidget->setWidget( new UASControlWidget(this) );
// addDockWidget(Qt::LeftDockWidgetArea, controlDockWidget);
// controlDockWidget->hide();
// infoDockWidget = new QDockWidget(tr("Status Details"), this);
// infoDockWidget->setWidget( new UASInfoWidget(this) );
// addDockWidget(Qt::LeftDockWidgetArea, infoDockWidget);
// //infoDockWidget->hide();
// listDockWidget = new QDockWidget(tr("Unmanned Systems"), this);
// listDockWidget->setWidget( new UASListWidget(this) );
// addDockWidget(Qt::BottomDockWidgetArea, listDockWidget);
// listDockWidget->hide();
// waypointsDockWidget = new QDockWidget(tr("Waypoint List"), this);
// waypointsDockWidget->setWidget( new WaypointList(this, NULL) );
// addDockWidget(Qt::BottomDockWidgetArea, waypointsDockWidget);
// waypointsDockWidget->hide();
// detectionDockWidget = new QDockWidget(tr("Object Recognition"), this);
// detectionDockWidget->setWidget( new ObjectDetectionView("images/patterns", this) );
// addDockWidget(Qt::RightDockWidgetArea, detectionDockWidget);
// detectionDockWidget->hide();
// debugConsoleDockWidget = new QDockWidget(tr("Communication Console"), this);
// debugConsoleDockWidget->setWidget( new DebugConsole(this) );
// addDockWidget(Qt::BottomDockWidgetArea, debugConsoleDockWidget);
// parametersDockWidget = new QDockWidget(tr("Onboard Parameters"), this);
// parametersDockWidget->setWidget( new ParameterInterface(this) );
// addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
// watchdogControlDockWidget = new QDockWidget(tr("Process Control"), this);
// watchdogControlDockWidget->setWidget( new WatchdogControl(this) );
// addDockWidget(Qt::RightDockWidgetArea, watchdogControlDockWidget);
// watchdogControlDockWidget->hide();
// hsiDockWidget = new QDockWidget(tr("Horizontal Situation Indicator"), this);
// hsiDockWidget->setWidget( new HSIDisplay(this) );
// addDockWidget(Qt::LeftDockWidgetArea, hsiDockWidget);
//>>>>>>> master
headDown1DockWidget = new QDockWidget(tr("System Stats"), this);
headDown1DockWidget->setWidget( new HDDisplay(acceptList, this) ); headDown1DockWidget->setWidget( new HDDisplay(acceptList, this) );
addToToolsMenu (headDown1DockWidget, tr("Flight Display"), SLOT(showToolWidget()), MENU_HDD_1, Qt::RightDockWidgetArea); addToToolsMenu (headDown1DockWidget, tr("Flight Display"), SLOT(showToolWidget()), MENU_HDD_1, Qt::RightDockWidgetArea);
headDown2DockWidget = new QDockWidget(tr("Payload Status"), this); headDown2DockWidget = new QDockWidget(tr("Payload Status"), this);
...@@ -201,6 +378,18 @@ void MainWindow::buildPxWidgets() ...@@ -201,6 +378,18 @@ void MainWindow::buildPxWidgets()
rcViewDockWidget = new QDockWidget(tr("Radio Control"), this); rcViewDockWidget = new QDockWidget(tr("Radio Control"), this);
rcViewDockWidget->setWidget( new QGCRemoteControlView(this) ); rcViewDockWidget->setWidget( new QGCRemoteControlView(this) );
addToToolsMenu (rcViewDockWidget, tr("Radio Control"), SLOT(showToolWidget()), MENU_RC_VIEW, Qt::BottomDockWidgetArea); addToToolsMenu (rcViewDockWidget, tr("Radio Control"), SLOT(showToolWidget()), MENU_RC_VIEW, Qt::BottomDockWidgetArea);
//=======
// addDockWidget(Qt::RightDockWidgetArea, headDown1DockWidget);
// headDown2DockWidget = new QDockWidget(tr("Payload Status"), this);
// headDown2DockWidget->setWidget( new HDDisplay(acceptList2, this) );
// addDockWidget(Qt::RightDockWidgetArea, headDown2DockWidget);
// rcViewDockWidget = new QDockWidget(tr("Radio Control"), this);
// rcViewDockWidget->setWidget( new QGCRemoteControlView(this) );
// addDockWidget(Qt::BottomDockWidgetArea, rcViewDockWidget);
// rcViewDockWidget->hide();
//>>>>>>> master
headUpDockWidget = new QDockWidget(tr("HUD"), this); headUpDockWidget = new QDockWidget(tr("HUD"), this);
headUpDockWidget->setWidget( new HUD(320, 240, this)); headUpDockWidget->setWidget( new HUD(320, 240, this));
...@@ -234,16 +423,34 @@ void MainWindow::buildSlugsWidgets() ...@@ -234,16 +423,34 @@ void MainWindow::buildSlugsWidgets()
slugsDataWidget->setWidget( new SlugsDataSensorView(this)); slugsDataWidget->setWidget( new SlugsDataSensorView(this));
addToToolsMenu (slugsDataWidget, tr("Telemetry Data"), SLOT(showToolWidget()), MENU_SLUGS_DATA, Qt::RightDockWidgetArea); addToToolsMenu (slugsDataWidget, tr("Telemetry Data"), SLOT(showToolWidget()), MENU_SLUGS_DATA, Qt::RightDockWidgetArea);
//=======
// this->addDockWidget(Qt::LeftDockWidgetArea, headUpDockWidget);
slugsPIDControlWidget = new QDockWidget(tr("PID Control"), this); // // SLUGS
// slugsDataWidget = new QDockWidget(tr("Slugs Data"), this);
// slugsDataWidget->setWidget( new SlugsDataSensorView(this));
// addDockWidget(Qt::LeftDockWidgetArea, slugsDataWidget);
// slugsDataWidget->hide();
//>>>>>>> master
slugsPIDControlWidget = new QDockWidget(tr("Slugs PID Control"), this);
slugsPIDControlWidget->setWidget(new SlugsPIDControl(this)); slugsPIDControlWidget->setWidget(new SlugsPIDControl(this));
addToToolsMenu (slugsPIDControlWidget, tr("PID Configuration"), SLOT(showToolWidget()), MENU_SLUGS_PID, Qt::LeftDockWidgetArea); addToToolsMenu (slugsPIDControlWidget, tr("PID Configuration"), SLOT(showToolWidget()), MENU_SLUGS_PID, Qt::LeftDockWidgetArea);
slugsHilSimWidget = new QDockWidget(tr("Slugs Hil Sim"), this); slugsHilSimWidget = new QDockWidget(tr("Slugs Hil Sim"), this);
slugsHilSimWidget->setWidget( new SlugsHilSim(this)); slugsHilSimWidget->setWidget( new SlugsHilSim(this));
addToToolsMenu (slugsHilSimWidget, tr("HIL Sim Configuration"), SLOT(showToolWidget()), MENU_SLUGS_HIL, Qt::LeftDockWidgetArea); addToToolsMenu (slugsHilSimWidget, tr("HIL Sim Configuration"), SLOT(showToolWidget()), MENU_SLUGS_HIL, Qt::LeftDockWidgetArea);
//=======
// addDockWidget(Qt::BottomDockWidgetArea, slugsPIDControlWidget);
// slugsPIDControlWidget->hide();
slugsCamControlWidget = new QDockWidget(tr("Video Camera Control"), this); // slugsHilSimWidget = new QDockWidget(tr("Slugs Hil Sim"), this);
// slugsHilSimWidget->setWidget( new SlugsHilSim(this));
// addDockWidget(Qt::BottomDockWidgetArea, slugsHilSimWidget);
// slugsHilSimWidget->hide();
//>>>>>>> master
slugsCamControlWidget = new QDockWidget(tr("Slugs Video Camera Control"), this);
slugsCamControlWidget->setWidget(new SlugsVideoCamControl(this)); slugsCamControlWidget->setWidget(new SlugsVideoCamControl(this));
addToToolsMenu (slugsCamControlWidget, tr("Camera Control"), SLOT(showToolWidget()), MENU_SLUGS_CAMERA, Qt::BottomDockWidgetArea); addToToolsMenu (slugsCamControlWidget, tr("Camera Control"), SLOT(showToolWidget()), MENU_SLUGS_CAMERA, Qt::BottomDockWidgetArea);
...@@ -475,6 +682,13 @@ void MainWindow::updateLocationSettings (Qt::DockWidgetArea location){ ...@@ -475,6 +682,13 @@ void MainWindow::updateLocationSettings (Qt::DockWidgetArea location){
break; break;
} }
} }
//=======
// addDockWidget(Qt::BottomDockWidgetArea, slugsCamControlWidget);
// slugsCamControlWidget->hide();
// //FIXME: free memory in destructor
// joystick = new JoystickInput();
//>>>>>>> master
} }
/** /**
...@@ -505,10 +719,6 @@ void MainWindow::connectPxWidgets() ...@@ -505,10 +719,6 @@ void MainWindow::connectPxWidgets()
{ {
if (linechartWidget) if (linechartWidget)
{ {
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)),
linechartWidget, SLOT(addSystem(UASInterface*)));
connect(UASManager::instance(), SIGNAL(activeUASSet(int)),
linechartWidget, SLOT(selectSystem(int)));
connect(linechartWidget, SIGNAL(logfileWritten(QString)), connect(linechartWidget, SIGNAL(logfileWritten(QString)),
this, SLOT(loadDataView(QString))); this, SLOT(loadDataView(QString)));
} }
...@@ -1006,7 +1216,8 @@ void MainWindow::clearView() ...@@ -1006,7 +1216,8 @@ void MainWindow::clearView()
if (dockWidget) if (dockWidget)
{ {
// Remove dock widget from main window // Remove dock widget from main window
this->removeDockWidget(dockWidget); //this->removeDockWidget(dockWidget);
dockWidget->setVisible(false);
// Deletion of dockWidget would also delete all child // Deletion of dockWidget would also delete all child
// widgets of dockWidget // widgets of dockWidget
// Is there a way to unset a widget from QDockWidget? // Is there a way to unset a widget from QDockWidget?
...@@ -1048,6 +1259,14 @@ void MainWindow::loadMAVLinkView() ...@@ -1048,6 +1259,14 @@ void MainWindow::loadMAVLinkView()
currentView = VIEW_MAVLINK; currentView = VIEW_MAVLINK;
presentView(); presentView();
//=======
// // Slugs Data View
// if (slugsHilSimWidget)
// {
// addDockWidget(Qt::LeftDockWidgetArea, slugsHilSimWidget);
// slugsHilSimWidget->show();
// }
//>>>>>>> master
} }
void MainWindow::presentView() { void MainWindow::presentView() {
...@@ -1224,12 +1443,18 @@ void MainWindow::presentView() { ...@@ -1224,12 +1443,18 @@ void MainWindow::presentView() {
} }
void MainWindow::showTheCentralWidget (TOOLS_WIDGET_NAMES centralWidget, VIEW_SECTIONS view){ void MainWindow::showTheCentralWidget (TOOLS_WIDGET_NAMES centralWidget, VIEW_SECTIONS view){
bool tempVisible; bool tempVisible;
QWidget* tempWidget = dockWidgets[centralWidget]; QWidget* tempWidget = dockWidgets[centralWidget];
//=======
// // ONBOARD PARAMETERS
// if (parametersDockWidget)
// {
// addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
// parametersDockWidget->show();
// }
//}
//>>>>>>> master
tempVisible = settings.value(buildMenuKey (SUB_SECTION_CHECKED,centralWidget,view)).toBool(); tempVisible = settings.value(buildMenuKey (SUB_SECTION_CHECKED,centralWidget,view)).toBool();
qDebug() << buildMenuKey (SUB_SECTION_CHECKED,centralWidget,view) << tempVisible; qDebug() << buildMenuKey (SUB_SECTION_CHECKED,centralWidget,view) << tempVisible;
...@@ -1281,6 +1506,24 @@ void MainWindow::loadAllView() ...@@ -1281,6 +1506,24 @@ void MainWindow::loadAllView()
hdd->start(); hdd->start();
} }
} }
//<<<<<<< HEAD
//=======
//}
//void MainWindow::loadOperatorView()
//{
// clearView();
// // MAP
// if (mapWidget)
// {
// QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
// if (centerStack)
// {
// centerStack->setCurrentWidget(mapWidget);
// }
// }
//>>>>>>> master
// UAS CONTROL // UAS CONTROL
if (controlDockWidget) if (controlDockWidget)
...@@ -1341,8 +1584,6 @@ void MainWindow::loadAllView() ...@@ -1341,8 +1584,6 @@ void MainWindow::loadAllView()
addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget); addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
parametersDockWidget->show(); parametersDockWidget->show();
} }
this->show();
} }
void MainWindow::loadWidgets() void MainWindow::loadWidgets()
...@@ -1430,7 +1671,6 @@ void MainWindow::load3DMapView() ...@@ -1430,7 +1671,6 @@ void MainWindow::load3DMapView()
} }
} }
#endif #endif
this->show();
} }
void MainWindow::loadGoogleEarthView() void MainWindow::loadGoogleEarthView()
...@@ -1480,7 +1720,6 @@ void MainWindow::loadGoogleEarthView() ...@@ -1480,7 +1720,6 @@ void MainWindow::loadGoogleEarthView()
hsiDockWidget->show(); hsiDockWidget->show();
} }
} }
this->show();
#endif #endif
} }
...@@ -1534,8 +1773,6 @@ void MainWindow::load3DView() ...@@ -1534,8 +1773,6 @@ void MainWindow::load3DView()
} }
} }
#endif #endif
this->show();
} }
/* /*
...@@ -1586,15 +1823,26 @@ void MainWindow::buildWidgets() ...@@ -1586,15 +1823,26 @@ void MainWindow::buildWidgets()
listDockWidget = new QDockWidget(tr("Unmanned Systems"), this); listDockWidget = new QDockWidget(tr("Unmanned Systems"), this);
listDockWidget->setWidget( new UASListWidget(this) ); listDockWidget->setWidget( new UASListWidget(this) );
<<<<<<< HEAD
waypointsDockWidget = new QDockWidget(tr("Waypoint List"), this); waypointsDockWidget = new QDockWidget(tr("Waypoint List"), this);
waypointsDockWidget->setWidget( new WaypointList(this, NULL) ); waypointsDockWidget->setWidget( new WaypointList(this, NULL) );
infoDockWidget = new QDockWidget(tr("Status Details"), this); infoDockWidget = new QDockWidget(tr("Status Details"), this);
infoDockWidget->setWidget( new UASInfoWidget(this) ); infoDockWidget->setWidget( new UASInfoWidget(this) );
=======
// RADIO CONTROL VIEW
if (rcViewDockWidget)
{
addDockWidget(Qt::BottomDockWidgetArea, rcViewDockWidget);
rcViewDockWidget->show();
}
}
>>>>>>> master
detectionDockWidget = new QDockWidget(tr("Object Recognition"), this); detectionDockWidget = new QDockWidget(tr("Object Recognition"), this);
detectionDockWidget->setWidget( new ObjectDetectionView("images/patterns", this) ); detectionDockWidget->setWidget( new ObjectDetectionView("images/patterns", this) );
<<<<<<< HEAD
debugConsoleDockWidget = new QDockWidget(tr("Communication Console"), this); debugConsoleDockWidget = new QDockWidget(tr("Communication Console"), this);
debugConsoleDockWidget->setWidget( new DebugConsole(this) ); debugConsoleDockWidget->setWidget( new DebugConsole(this) );
...@@ -1635,6 +1883,16 @@ void MainWindow::buildWidgets() ...@@ -1635,6 +1883,16 @@ void MainWindow::buildWidgets()
slugsCamControlWidget = new QDockWidget(tr("Video Camera Control"), this); slugsCamControlWidget = new QDockWidget(tr("Video Camera Control"), this);
slugsCamControlWidget->setWidget(new SlugsVideoCamControl(this)); slugsCamControlWidget->setWidget(new SlugsVideoCamControl(this));
=======
if (protocolWidget)
{
QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
if (centerStack)
{
centerStack->setCurrentWidget(protocolWidget);
}
}
>>>>>>> master
} }
void MainWindow::connectWidgets() void MainWindow::connectWidgets()
...@@ -1707,10 +1965,19 @@ void MainWindow::arrangeCenterStack() ...@@ -1707,10 +1965,19 @@ void MainWindow::arrangeCenterStack()
if (dataplotWidget) centerStack->addWidget(dataplotWidget); if (dataplotWidget) centerStack->addWidget(dataplotWidget);
setCentralWidget(centerStack); setCentralWidget(centerStack);
=======
// ONBOARD PARAMETERS
if (parametersDockWidget)
{
addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
parametersDockWidget->show();
}
>>>>>>> master
} }
void MainWindow::connectActions() void MainWindow::connectActions()
{ {
<<<<<<< HEAD
// Connect actions from ui // Connect actions from ui
connect(ui.actionAdd_Link, SIGNAL(triggered()), this, SLOT(addLink())); connect(ui.actionAdd_Link, SIGNAL(triggered()), this, SLOT(addLink()));
...@@ -1763,6 +2030,9 @@ void MainWindow::connectActions() ...@@ -1763,6 +2030,9 @@ void MainWindow::connectActions()
//GlobalOperatorView //GlobalOperatorView
// connect(ui.actionGlobalOperatorView,SIGNAL(triggered()),waypointsDockWidget->widget(),SLOT()) // connect(ui.actionGlobalOperatorView,SIGNAL(triggered()),waypointsDockWidget->widget(),SLOT())
=======
//loadEngineerView();
>>>>>>> master
} }
*/ */
...@@ -87,6 +87,9 @@ public: ...@@ -87,6 +87,9 @@ public:
~MainWindow(); ~MainWindow();
public slots: public slots:
// /** @brief Store the mainwindow settings */
// void storeSettings();
/** /**
* @brief Shows a status message on the bottom status bar * @brief Shows a status message on the bottom status bar
* *
...@@ -324,7 +327,6 @@ protected: ...@@ -324,7 +327,6 @@ protected:
void configureWindowName(); void configureWindowName();
// TODO Should be moved elsewhere, as the protocol does not belong to the UI // TODO Should be moved elsewhere, as the protocol does not belong to the UI
MAVLinkProtocol* mavlink; MAVLinkProtocol* mavlink;
AS4Protocol* as4link; AS4Protocol* as4link;
...@@ -367,6 +369,7 @@ protected: ...@@ -367,6 +369,7 @@ protected:
QPointer<QDockWidget> hsiDockWidget; QPointer<QDockWidget> hsiDockWidget;
QPointer<QDockWidget> rcViewDockWidget; QPointer<QDockWidget> rcViewDockWidget;
QPointer<QDockWidget> hudDockWidget;
QPointer<QDockWidget> slugsDataWidget; QPointer<QDockWidget> slugsDataWidget;
QPointer<QDockWidget> slugsPIDControlWidget; QPointer<QDockWidget> slugsPIDControlWidget;
QPointer<QDockWidget> slugsHilSimWidget; QPointer<QDockWidget> slugsHilSimWidget;
......
...@@ -108,14 +108,7 @@ ...@@ -108,14 +108,7 @@
<addaction name="menuPerspectives"/> <addaction name="menuPerspectives"/>
<addaction name="menuHelp"/> <addaction name="menuHelp"/>
</widget> </widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/> <widget class="QStatusBar" name="statusBar"/>
<action name="actionExit"> <action name="actionExit">
<property name="icon"> <property name="icon">
...@@ -461,3 +454,5 @@ ...@@ -461,3 +454,5 @@
</connection> </connection>
</connections> </connections>
</ui> </ui>
...@@ -593,21 +593,12 @@ void MapWidget::updateGlobalPosition(UASInterface* uas, double lat, double lon, ...@@ -593,21 +593,12 @@ void MapWidget::updateGlobalPosition(UASInterface* uas, double lat, double lon,
uasTrails.value(uas->getUASID())->addPoint(new qmapcontrol::Point(lat, lon, QString("lat: %1 lon: %2").arg(lat, lon))); uasTrails.value(uas->getUASID())->addPoint(new qmapcontrol::Point(lat, lon, QString("lat: %1 lon: %2").arg(lat, lon)));
} }
// points.append(new CirclePoint(8.275145, 50.016992, 15, "Wiesbaden-Mainz-Kastel, Johannes-Goßner-Straße", Point::Middle, pointpen));
// points.append(new CirclePoint(8.270476, 50.021426, 15, "Wiesbaden-Mainz-Kastel, Ruthof", Point::Middle, pointpen));
// // "Blind" Points
// points.append(new Point(8.266445, 50.025913, "Wiesbaden-Mainz-Kastel, Mudra Kaserne"));
// points.append(new Point(8.260378, 50.030345, "Wiesbaden-Mainz-Amoneburg, Dyckerhoffstraße"));
// Connect click events of the layer to this object // Connect click events of the layer to this object
// connect(osmLayer, SIGNAL(geometryClicked(Geometry*, QPoint)), // connect(osmLayer, SIGNAL(geometryClicked(Geometry*, QPoint)),
// this, SLOT(geometryClicked(Geometry*, QPoint))); // this, SLOT(geometryClicked(Geometry*, QPoint)));
// Sets the view to the interesting area // Sets the view to the interesting area
//QList<QPointF> view;
//view.append(QPointF(8.24764, 50.0319));
//view.append(QPointF(8.28412, 49.9998));
// mc->setView(view);
updatePosition(0, lat, lon); updatePosition(0, lat, lon);
} }
} }
......
...@@ -51,6 +51,15 @@ ParameterInterface::ParameterInterface(QWidget *parent) : ...@@ -51,6 +51,15 @@ ParameterInterface::ParameterInterface(QWidget *parent) :
// Setup UI connections // Setup UI connections
connect(m_ui->vehicleComboBox, SIGNAL(activated(int)), this, SLOT(selectUAS(int))); connect(m_ui->vehicleComboBox, SIGNAL(activated(int)), this, SLOT(selectUAS(int)));
// Get current MAV list
QList<UASInterface*> systems = UASManager::instance()->getUASList();
// Add each of them
foreach (UASInterface* sys, systems)
{
addUAS(sys);
}
// Setup MAV connections // Setup MAV connections
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(addUAS(UASInterface*))); connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(addUAS(UASInterface*)));
this->setVisible(false); this->setVisible(false);
......
#include "QGCMainWindowAPConfigurator.h"
QGCMainWindowAPConfigurator::QGCMainWindowAPConfigurator(QObject *parent) :
QObject(parent)
{
}
#ifndef QGCMAINWINDOWAPCONFIGURATOR_H
#define QGCMAINWINDOWAPCONFIGURATOR_H
#include <QObject>
class QGCMainWindowAPConfigurator : public QObject
{
Q_OBJECT
public:
explicit QGCMainWindowAPConfigurator(QObject *parent = 0);
signals:
public slots:
};
#endif // QGCMAINWINDOWAPCONFIGURATOR_H
...@@ -33,6 +33,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -33,6 +33,7 @@ This file is part of the QGROUNDCONTROL project
#include <SerialConfigurationWindow.h> #include <SerialConfigurationWindow.h>
#include <SerialLinkInterface.h> #include <SerialLinkInterface.h>
#include <QDir> #include <QDir>
#include <QSettings>
#include <QFileInfoList> #include <QFileInfoList>
#ifdef _WIN32 #ifdef _WIN32
#include <QextSerialEnumerator.h> #include <QextSerialEnumerator.h>
...@@ -509,12 +510,3 @@ void SerialConfigurationWindow::setLinkName(QString name) ...@@ -509,12 +510,3 @@ void SerialConfigurationWindow::setLinkName(QString name)
setWindowTitle(tr("Configuration of ") + link->getName()); setWindowTitle(tr("Configuration of ") + link->getName());
} }
void SerialConfigurationWindow::remove()
{
link->disconnect();
//delete link;
//delete action;
this->window()->close();
qDebug() << "TODO: Link cannot be deleted: SerialConfigurationWindow::remove() NOT IMPLEMENTED!";
}
...@@ -60,12 +60,6 @@ public slots: ...@@ -60,12 +60,6 @@ public slots:
void setParityEven(); void setParityEven();
void setPortName(QString port); void setPortName(QString port);
void setLinkName(QString name); void setLinkName(QString name);
/**
* @brief Remove this link
*
* Disconnects the associated link, removes it from all menus and closes the window.
*/
void remove();
void setupPortList(); void setupPortList();
protected slots: protected slots:
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "ui_XMLCommProtocolWidget.h" #include "ui_XMLCommProtocolWidget.h"
#include "MAVLinkXMLParser.h" #include "MAVLinkXMLParser.h"
#include "MAVLinkSyntaxHighlighter.h" #include "MAVLinkSyntaxHighlighter.h"
#include "QGC.h"
#include <QDebug> #include <QDebug>
#include <iostream> #include <iostream>
...@@ -31,7 +32,7 @@ XMLCommProtocolWidget::XMLCommProtocolWidget(QWidget *parent) : ...@@ -31,7 +32,7 @@ XMLCommProtocolWidget::XMLCommProtocolWidget(QWidget *parent) :
void XMLCommProtocolWidget::selectXMLFile() void XMLCommProtocolWidget::selectXMLFile()
{ {
//QString fileName = QFileDialog::getOpenFileName(this, tr("Load Protocol Definition File"), ".", "*.xml"); //QString fileName = QFileDialog::getOpenFileName(this, tr("Load Protocol Definition File"), ".", "*.xml");
QSettings settings; QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
const QString mavlinkXML = "MAVLINK_XML_FILE"; const QString mavlinkXML = "MAVLINK_XML_FILE";
QString dirPath = settings.value(mavlinkXML, QCoreApplication::applicationDirPath() + "../").toString(); QString dirPath = settings.value(mavlinkXML, QCoreApplication::applicationDirPath() + "../").toString();
QFileDialog dialog; QFileDialog dialog;
...@@ -56,6 +57,7 @@ void XMLCommProtocolWidget::selectXMLFile() ...@@ -56,6 +57,7 @@ void XMLCommProtocolWidget::selectXMLFile()
setXML(instanceText); setXML(instanceText);
// Store filename for next time // Store filename for next time
settings.setValue(mavlinkXML, QFileInfo(file).absoluteFilePath()); settings.setValue(mavlinkXML, QFileInfo(file).absoluteFilePath());
settings.sync();
} }
else else
{ {
...@@ -92,7 +94,7 @@ void XMLCommProtocolWidget::setXML(const QString& xml) ...@@ -92,7 +94,7 @@ void XMLCommProtocolWidget::setXML(const QString& xml)
void XMLCommProtocolWidget::selectOutputDirectory() void XMLCommProtocolWidget::selectOutputDirectory()
{ {
QSettings settings; QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
const QString mavlinkOutputDir = "MAVLINK_OUTPUT_DIR"; const QString mavlinkOutputDir = "MAVLINK_OUTPUT_DIR";
QString dirPath = settings.value(mavlinkOutputDir, QCoreApplication::applicationDirPath() + "../").toString(); QString dirPath = settings.value(mavlinkOutputDir, QCoreApplication::applicationDirPath() + "../").toString();
QFileDialog dialog; QFileDialog dialog;
...@@ -110,7 +112,8 @@ void XMLCommProtocolWidget::selectOutputDirectory() ...@@ -110,7 +112,8 @@ void XMLCommProtocolWidget::selectOutputDirectory()
{ {
m_ui->outputDirNameLabel->setText(fileNames.first()); m_ui->outputDirNameLabel->setText(fileNames.first());
// Store directory for next time // Store directory for next time
settings.setValue(mavlinkOutputDir, fileNames.first()); settings.setValue(mavlinkOutputDir, QFileInfo(fileNames.first()).absoluteFilePath());
settings.sync();
//QFile file(fileName); //QFile file(fileName);
} }
} }
......
...@@ -56,7 +56,7 @@ maxInterval(MAX_STORAGE_INTERVAL), ...@@ -56,7 +56,7 @@ maxInterval(MAX_STORAGE_INTERVAL),
timeScaleStep(DEFAULT_SCALE_INTERVAL), // 10 seconds timeScaleStep(DEFAULT_SCALE_INTERVAL), // 10 seconds
automaticScrollActive(false), automaticScrollActive(false),
m_active(true), m_active(true),
m_groundTime(false), m_groundTime(true),
d_data(NULL), d_data(NULL),
d_curve(NULL) d_curve(NULL)
{ {
......
...@@ -159,7 +159,9 @@ void LinechartWidget::createLayout() ...@@ -159,7 +159,9 @@ void LinechartWidget::createLayout()
QToolButton* timeButton = new QToolButton(this); QToolButton* timeButton = new QToolButton(this);
timeButton->setText(tr("Ground Time")); timeButton->setText(tr("Ground Time"));
timeButton->setCheckable(true); timeButton->setCheckable(true);
timeButton->setChecked(false); bool gTimeDefault = true;
if (activePlot) activePlot->enforceGroundTime(gTimeDefault);
timeButton->setChecked(gTimeDefault);
layout->addWidget(timeButton, 1, 4); layout->addWidget(timeButton, 1, 4);
layout->setColumnStretch(4, 0); layout->setColumnStretch(4, 0);
connect(timeButton, SIGNAL(clicked(bool)), activePlot, SLOT(enforceGroundTime(bool))); connect(timeButton, SIGNAL(clicked(bool)), activePlot, SLOT(enforceGroundTime(bool)));
...@@ -442,6 +444,12 @@ void LinechartWidget::removeCurve(QString curve) ...@@ -442,6 +444,12 @@ void LinechartWidget::removeCurve(QString curve)
// Remove name // Remove name
} }
void LinechartWidget::showEvent(QShowEvent* event)
{
Q_UNUSED(event);
setActive(isVisible());
}
void LinechartWidget::setActive(bool active) void LinechartWidget::setActive(bool active)
{ {
if (activePlot) if (activePlot)
......
...@@ -77,6 +77,8 @@ public slots: ...@@ -77,6 +77,8 @@ public slots:
void setPlotWindowPosition(int scrollBarValue); void setPlotWindowPosition(int scrollBarValue);
void setPlotWindowPosition(quint64 position); void setPlotWindowPosition(quint64 position);
void setPlotInterval(quint64 interval); void setPlotInterval(quint64 interval);
/** @brief Override base class show */
virtual void showEvent(QShowEvent* event);
void setActive(bool active); void setActive(bool active);
/** @brief Set the number of values to average over */ /** @brief Set the number of values to average over */
void setAverageWindow(int windowSize); void setAverageWindow(int windowSize);
......
#include "Linecharts.h" #include "Linecharts.h"
#include "UASManager.h"
Linecharts::Linecharts(QWidget *parent) : Linecharts::Linecharts(QWidget *parent) :
QStackedWidget(parent), QStackedWidget(parent),
...@@ -6,6 +7,18 @@ Linecharts::Linecharts(QWidget *parent) : ...@@ -6,6 +7,18 @@ Linecharts::Linecharts(QWidget *parent) :
active(true) active(true)
{ {
this->setVisible(false); this->setVisible(false);
// Get current MAV list
QList<UASInterface*> systems = UASManager::instance()->getUASList();
// Add each of them
foreach (UASInterface* sys, systems)
{
addSystem(sys);
}
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)),
this, SLOT(addSystem(UASInterface*)));
connect(UASManager::instance(), SIGNAL(activeUASSet(int)),
this, SLOT(selectSystem(int)));
} }
......
...@@ -14,7 +14,10 @@ MAV2DIcon::MAV2DIcon(qreal x, qreal y, QString name, Alignment alignment, QPen* ...@@ -14,7 +14,10 @@ MAV2DIcon::MAV2DIcon(qreal x, qreal y, QString name, Alignment alignment, QPen*
{ {
int radius = 10; int radius = 10;
size = QSize(radius, radius); size = QSize(radius, radius);
drawIcon(pen); if (pen)
{
drawIcon(pen);
}
} }
MAV2DIcon::~MAV2DIcon() MAV2DIcon::~MAV2DIcon()
...@@ -24,8 +27,11 @@ MAV2DIcon::~MAV2DIcon() ...@@ -24,8 +27,11 @@ MAV2DIcon::~MAV2DIcon()
void MAV2DIcon::setPen(QPen* pen) void MAV2DIcon::setPen(QPen* pen)
{ {
mypen = pen; if (pen)
drawIcon(pen); {
mypen = pen;
drawIcon(pen);
}
} }
/** /**
...@@ -38,46 +44,49 @@ void MAV2DIcon::setYaw(float yaw) ...@@ -38,46 +44,49 @@ void MAV2DIcon::setYaw(float yaw)
void MAV2DIcon::drawIcon(QPen* pen) void MAV2DIcon::drawIcon(QPen* pen)
{ {
mypixmap = new QPixmap(radius+1, radius+1); if (pen)
mypixmap->fill(Qt::transparent); {
QPainter painter(mypixmap); mypixmap = new QPixmap(radius+1, radius+1);
mypixmap->fill(Qt::transparent);
QPainter painter(mypixmap);
// DRAW MICRO AIR VEHICLE // DRAW MICRO AIR VEHICLE
QPointF p(radius/2, radius/2); QPointF p(radius/2, radius/2);
float waypointSize = radius; float waypointSize = radius;
QPolygonF poly(3); QPolygonF poly(3);
// Top point // Top point
poly.replace(0, QPointF(p.x(), p.y()+waypointSize/2.0f)); poly.replace(0, QPointF(p.x(), p.y()+waypointSize/2.0f));
// Right point // Right point
poly.replace(1, QPointF(p.x()-waypointSize/2.0f, p.y()-waypointSize/2.0f)); poly.replace(1, QPointF(p.x()-waypointSize/2.0f, p.y()-waypointSize/2.0f));
// Left point // Left point
poly.replace(2, QPointF(p.x()+waypointSize/2.0f, p.y() + waypointSize/2.0f)); poly.replace(2, QPointF(p.x()+waypointSize/2.0f, p.y() + waypointSize/2.0f));
// // Select color based on if this is the current waypoint // // Select color based on if this is the current waypoint
// if (list.at(i)->getCurrent()) // if (list.at(i)->getCurrent())
// { // {
// color = QGC::colorCyan;//uas->getColor(); // color = QGC::colorCyan;//uas->getColor();
// pen.setWidthF(refLineWidthToPen(0.8f)); // pen.setWidthF(refLineWidthToPen(0.8f));
// } // }
// else // else
// { // {
// color = uas->getColor(); // color = uas->getColor();
// pen.setWidthF(refLineWidthToPen(0.4f)); // pen.setWidthF(refLineWidthToPen(0.4f));
// } // }
//pen.setColor(color); //pen.setColor(color);
if (pen) if (pen)
{ {
pen->setWidthF(2); pen->setWidthF(2);
painter.setPen(*pen); painter.setPen(*pen);
} }
else else
{ {
QPen pen2(Qt::yellow); QPen pen2(Qt::yellow);
pen2.setWidth(2); pen2.setWidth(2);
painter.setPen(pen2); painter.setPen(pen2);
}
painter.setBrush(Qt::NoBrush);
painter.drawPolygon(poly);
} }
painter.setBrush(Qt::NoBrush);
painter.drawPolygon(poly);
} }
...@@ -30,6 +30,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -30,6 +30,7 @@ This file is part of the QGROUNDCONTROL project
*/ */
#include "GCManipulator.h" #include "GCManipulator.h"
#include <osg/Version>
GCManipulator::GCManipulator() GCManipulator::GCManipulator()
{ {
...@@ -254,10 +255,10 @@ GCManipulator::calcMovement(void) ...@@ -254,10 +255,10 @@ GCManipulator::calcMovement(void)
if (buttonMask == GUIEventAdapter::LEFT_MOUSE_BUTTON) if (buttonMask == GUIEventAdapter::LEFT_MOUSE_BUTTON)
{ {
// rotate camera // rotate camera
#ifdef __WIN32__ #if ((OPENSCENEGRAPH_MAJOR_VERSION == 2) & (OPENSCENEGRAPH_MINOR_VERSION > 8)) | (OPENSCENEGRAPH_MAJOR_VERSION > 2)
osg::Vec3 axis;
#else
osg::Vec3d axis; osg::Vec3d axis;
#else
osg::Vec3 axis;
#endif #endif
float angle; float angle;
......
...@@ -16,9 +16,11 @@ ...@@ -16,9 +16,11 @@
QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) : QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) :
QWidget(parent), QWidget(parent),
updateTimer(new QTimer(this)), updateTimer(new QTimer(this)),
refreshRateMs(200),
mav(NULL), mav(NULL),
followCamera(true), followCamera(true),
trailEnabled(true), trailEnabled(true),
webViewInitialized(false),
#if (defined Q_OS_MAC) #if (defined Q_OS_MAC)
webViewMac(new QWebView(this)), webViewMac(new QWebView(this)),
#endif #endif
...@@ -34,22 +36,14 @@ QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) : ...@@ -34,22 +36,14 @@ QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) :
#endif #endif
ui->setupUi(this); ui->setupUi(this);
#if (defined Q_OS_MAC) #if (defined Q_OS_MAC)
ui->webViewLayout->addWidget(webViewMac); ui->webViewLayout->addWidget(webViewMac);
webViewMac->setPage(new QGCWebPage(webViewMac));
webViewMac->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
webViewMac->load(QUrl("earth.html"));
#endif
#if (defined Q_OS_WIN) & !(defined __MINGW32__)
webViewWin->load(QUrl("earth.html"));
#endif #endif
#if ((defined Q_OS_MAC) | ((defined Q_OS_WIN) & !(defined __MINGW32__))) #if ((defined Q_OS_MAC) | ((defined Q_OS_WIN) & !(defined __MINGW32__)))
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*))); connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*)));
connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateState())); connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateState()));
updateTimer->start(200); updateTimer->start(refreshRateMs);
#endif #endif
// Follow checkbox // Follow checkbox
...@@ -94,53 +88,82 @@ void QGCGoogleEarthView::follow(bool follow) ...@@ -94,53 +88,82 @@ void QGCGoogleEarthView::follow(bool follow)
followCamera = follow; followCamera = follow;
} }
void QGCGoogleEarthView::updateState() void QGCGoogleEarthView::hide()
{ {
#ifdef Q_OS_MAC updateTimer->stop();
if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) QWidget::hide();
}
void QGCGoogleEarthView::show()
{
if (!webViewInitialized)
{ {
static bool initialized = false; #if (defined Q_OS_MAC)
if (!initialized) webViewMac->setPage(new QGCWebPage(webViewMac));
{ webViewMac->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
webViewMac->page()->currentFrame()->evaluateJavaScript("setGCSHome(22.679833,8.549444, 470);"); webViewMac->load(QUrl("earth.html"));
initialized = true; #endif
}
int uasId = 0;
double lat = 22.679833;
double lon = 8.549444;
double alt = 470.0;
float roll = 0.0f; #if (defined Q_OS_WIN) & !(defined __MINGW32__)
float pitch = 0.0f; webViewWin->load(QUrl("earth.html"));
float yaw = 0.0f; #endif
webViewInitialized = true;
}
updateTimer->start();
QWidget::show();
}
if (mav) void QGCGoogleEarthView::updateState()
{ {
uasId = mav->getUASID(); #ifdef Q_OS_MAC
lat = mav->getLatitude(); if (isVisible())
lon = mav->getLongitude(); {
alt = mav->getAltitude(); if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool())
roll = mav->getRoll();
pitch = mav->getPitch();
yaw = mav->getYaw();
}
webViewMac->page()->currentFrame()->evaluateJavaScript(QString("setAircraftPositionAttitude(%1, %2, %3, %4, %6, %7, %8);")
.arg(uasId)
.arg(lat)
.arg(lon)
.arg(alt+500)
.arg(roll)
.arg(pitch)
.arg(yaw));
if (followCamera)
{ {
webViewMac->page()->currentFrame()->evaluateJavaScript(QString("updateFollowAircraft()")); static bool initialized = false;
if (!initialized)
{
webViewMac->page()->currentFrame()->evaluateJavaScript("setGCSHome(22.679833,8.549444, 470);");
initialized = true;
}
int uasId = 0;
double lat = 22.679833;
double lon = 8.549444;
double alt = 470.0;
float roll = 0.0f;
float pitch = 0.0f;
float yaw = 0.0f;
if (mav)
{
uasId = mav->getUASID();
lat = mav->getLatitude();
lon = mav->getLongitude();
alt = mav->getAltitude();
roll = mav->getRoll();
pitch = mav->getPitch();
yaw = mav->getYaw();
}
webViewMac->page()->currentFrame()->evaluateJavaScript(QString("setAircraftPositionAttitude(%1, %2, %3, %4, %6, %7, %8);")
.arg(uasId)
.arg(lat)
.arg(lon)
.arg(alt+500)
.arg(roll)
.arg(pitch)
.arg(yaw));
if (followCamera)
{
webViewMac->page()->currentFrame()->evaluateJavaScript(QString("updateFollowAircraft()"));
}
} }
} }
#endif #endif
} }
void QGCGoogleEarthView::changeEvent(QEvent *e) void QGCGoogleEarthView::changeEvent(QEvent *e)
{ {
QWidget::changeEvent(e); QWidget::changeEvent(e);
......
...@@ -62,13 +62,19 @@ public slots: ...@@ -62,13 +62,19 @@ public slots:
void showWaypoints(bool state); void showWaypoints(bool state);
/** @brief Follow the aircraft during flight */ /** @brief Follow the aircraft during flight */
void follow(bool follow); void follow(bool follow);
/** @brief Hide and deactivate */
void hide();
/** @brief Show and activate */
void show();
protected: protected:
void changeEvent(QEvent *e); void changeEvent(QEvent *e);
QTimer* updateTimer; QTimer* updateTimer;
int refreshRateMs;
UASInterface* mav; UASInterface* mav;
bool followCamera; bool followCamera;
bool trailEnabled; bool trailEnabled;
bool webViewInitialized;
#if (defined Q_OS_WIN) && !(defined __MINGW32__) #if (defined Q_OS_WIN) && !(defined __MINGW32__)
WebAxWidget* webViewWin; WebAxWidget* webViewWin;
#endif #endif
......
...@@ -38,8 +38,13 @@ This file is part of the QGROUNDCONTROL project ...@@ -38,8 +38,13 @@ This file is part of the QGROUNDCONTROL project
QMap3D::QMap3D(QWidget * parent, const char * name, WindowFlags f) : QMap3D::QMap3D(QWidget * parent, const char * name, WindowFlags f) :
QWidget(parent,f) QWidget(parent,f)
{ {
Q_UNUSED(name);
setupUi(this); setupUi(this);
#if ((OPENSCENEGRAPH_MAJOR_VERSION == 2) & (OPENSCENEGRAPH_MINOR_VERSION > 8)) | (OPENSCENEGRAPH_MAJOR_VERSION > 2)
graphicsView->setCameraManipulator(new osgEarth::Util::EarthManipulator); graphicsView->setCameraManipulator(new osgEarth::Util::EarthManipulator);
#else
graphicsView->setCameraManipulator(new osgEarthUtil::EarthManipulator);
#endif
graphicsView->setSceneData(new osg::Group); graphicsView->setSceneData(new osg::Group);
graphicsView->updateCamera(); graphicsView->updateCamera();
show(); show();
......
...@@ -50,7 +50,7 @@ This file is part of the PIXHAWK project ...@@ -50,7 +50,7 @@ This file is part of the PIXHAWK project
#define CONTROL_MODE_TEST2 "MODE TEST2" #define CONTROL_MODE_TEST2 "MODE TEST2"
#define CONTROL_MODE_TEST3 "MODE TEST3" #define CONTROL_MODE_TEST3 "MODE TEST3"
#define CONTROL_MODE_READY "MODE TEST3" #define CONTROL_MODE_READY "MODE TEST3"
#define CONTROL_MODE_RC_TRAINING "MODE RC TRAINING" #define CONTROL_MODE_RC_TRAINING "RC SIMULATION"
#define CONTROL_MODE_LOCKED_INDEX 1 #define CONTROL_MODE_LOCKED_INDEX 1
#define CONTROL_MODE_MANUAL_INDEX 2 #define CONTROL_MODE_MANUAL_INDEX 2
......
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