Skip to content

Commit

Permalink
Improved application persistence
Browse files Browse the repository at this point in the history
  • Loading branch information
LorenzMeier committed Dec 12, 2010
1 parent 73436f4 commit 4e1c7dc
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 9 deletions.
3 changes: 3 additions & 0 deletions src/Core.cc
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,9 @@ Core::Core(int &argc, char* argv[]) : QApplication(argc, argv)
**/
Core::~Core()
{
mainWindow->storeSettings();
mainWindow->hide();
mainWindow->deleteLater();
// Delete singletons
delete LinkManager::instance();
delete UASManager::instance();
Expand Down
37 changes: 31 additions & 6 deletions src/comm/SerialLink.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,11 @@ This file is part of the QGROUNDCONTROL project

#include <QTimer>
#include <QDebug>
#include <QSettings>
#include <QMutexLocker>
#include "SerialLink.h"
#include "LinkManager.h"
#include "QGC.h"
#include <MG.h>
#ifdef _WIN32
#include "windows.h"
Expand All @@ -54,12 +56,26 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
#endif
// Set unique ID and add link to the list of links
this->id = getNextLinkId();
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.

// Load defaults from settings
QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
if (settings.contains("SERIALLINK_COMM_PORT"))
{
this->porthandle = settings.value("SERIALLINK_COMM_PORT").toString();
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.
}

// Set the port name
if (porthandle == "")
Expand Down Expand Up @@ -282,6 +298,15 @@ bool SerialLink::connect()
**/
bool SerialLink::hardwareConnect()
{
// Store settings
QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
settings.setValue("SERIALLINK_COMM_PORT", this->porthandle);
settings.setValue("SERIALLINK_COMM_BAUD", this->baudrate);
settings.setValue("SERIALLINK_COMM_PARITY", this->parity);
settings.setValue("SERIALLINK_COMM_STOPBITS", this->stopBits);
settings.setValue("SERIALLINK_COMM_DATABITS", this->dataBits);
settings.sync();

QObject::connect(port, SIGNAL(aboutToClose()), this, SIGNAL(disconnected()));

port->open(QIODevice::ReadWrite);
Expand Down
7 changes: 4 additions & 3 deletions src/uas/UAS.cc
Original file line number Diff line number Diff line change
Expand Up @@ -365,9 +365,10 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
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);
// FIXME Message re-routing should be implemented differently
//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;
case MAVLINK_MSG_ID_GPS_RAW:
Expand Down
48 changes: 48 additions & 0 deletions src/ui/MainWindow.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <QHostInfo>

#include "MG.h"
#include "QGC.h"
#include "MAVLinkSimulationLink.h"
#include "SerialLink.h"
#include "UDPLink.h"
Expand Down Expand Up @@ -89,6 +90,32 @@ MainWindow::MainWindow(QWidget *parent) :
// QMenu* centerMenu = createCenterWidgetMenu();
// centerMenu->setTitle("Center");
// ui.menuBar->addMenu(centerMenu);

// 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();
}

Expand All @@ -98,6 +125,27 @@ MainWindow::~MainWindow()
statusBar = NULL;
}

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;
Expand Down
3 changes: 3 additions & 0 deletions src/ui/MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ class MainWindow : public QMainWindow {
~MainWindow();

public slots:
/** @brief Store the mainwindow settings */
void storeSettings();

/**
* @brief Shows a status message on the bottom status bar
*
Expand Down
1 change: 1 addition & 0 deletions src/ui/SerialConfigurationWindow.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ This file is part of the QGROUNDCONTROL project
#include <SerialConfigurationWindow.h>
#include <SerialLinkInterface.h>
#include <QDir>
#include <QSettings>
#include <QFileInfoList>
#ifdef _WIN32
#include <QextSerialEnumerator.h>
Expand Down
2 changes: 2 additions & 0 deletions src/ui/XMLCommProtocolWidget.cc
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ void XMLCommProtocolWidget::selectXMLFile()
setXML(instanceText);
// Store filename for next time
settings.setValue(mavlinkXML, QFileInfo(file).absoluteFilePath());
settings.sync();
}
else
{
Expand Down Expand Up @@ -112,6 +113,7 @@ void XMLCommProtocolWidget::selectOutputDirectory()
m_ui->outputDirNameLabel->setText(fileNames.first());
// Store directory for next time
settings.setValue(mavlinkOutputDir, QFileInfo(fileNames.first()).absoluteFilePath());
settings.sync();
//QFile file(fileName);
}
}
Expand Down

0 comments on commit 4e1c7dc

Please sign in to comment.