mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-18 08:54:15 +01:00
OP-1245 Added code to load settings from xml file.
This commit is contained in:
parent
41865d5e78
commit
1dae98a378
@ -30,6 +30,9 @@
|
|||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
#include <QXmlStreamReader>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
#include "debuglogcontrol.h"
|
#include "debuglogcontrol.h"
|
||||||
#include "uavobjecthelper.h"
|
#include "uavobjecthelper.h"
|
||||||
@ -351,8 +354,7 @@ void FlightLogManager::exportLogs()
|
|||||||
|
|
||||||
QString selectedFilter = csvFilter;
|
QString selectedFilter = csvFilter;
|
||||||
|
|
||||||
QString fileName = QFileDialog::getSaveFileName(NULL, tr("Save Log Entries"),
|
QString fileName = QFileDialog::getSaveFileName(NULL, tr("Save Log Entries"), QDir::homePath(),
|
||||||
QString("OP-%1").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss")),
|
|
||||||
QString("%1;;%2;;%3").arg(oplFilter, csvFilter, xmlFilter), &selectedFilter);
|
QString("%1;;%2;;%3").arg(oplFilter, csvFilter, xmlFilter), &selectedFilter);
|
||||||
if (!fileName.isEmpty()) {
|
if (!fileName.isEmpty()) {
|
||||||
if (selectedFilter == oplFilter) {
|
if (selectedFilter == oplFilter) {
|
||||||
@ -383,13 +385,68 @@ void FlightLogManager::cancelExportLogs()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FlightLogManager::loadSettings()
|
void FlightLogManager::loadSettings()
|
||||||
{}
|
{
|
||||||
|
QString xmlFilter = tr("XML file %1").arg("(*.xml)");
|
||||||
|
QString fileName = QFileDialog::getOpenFileName(NULL, tr("Load Log Settings"), QDir::homePath(), QString("%1").arg(xmlFilter));
|
||||||
|
if (!fileName.isEmpty()) {
|
||||||
|
if (!fileName.endsWith(".xml")) {
|
||||||
|
fileName.append(".xml");
|
||||||
|
}
|
||||||
|
QFile xmlFile(fileName);
|
||||||
|
QString errorString;
|
||||||
|
if (xmlFile.open(QFile::ReadOnly)) {
|
||||||
|
QXmlStreamReader xmlReader(&xmlFile);
|
||||||
|
while (xmlReader.readNextStartElement() && xmlReader.name() == "settings") {
|
||||||
|
bool ok;
|
||||||
|
|
||||||
|
int version = xmlReader.attributes().value("version").toInt(&ok);
|
||||||
|
if (!ok || version != LOG_SETTINGS_FILE_VERSION) {
|
||||||
|
errorString = tr("The file has the wrong version or could not parse version information.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
setLoggingEnabled(xmlReader.attributes().value("enabled").toInt(&ok));
|
||||||
|
if (!ok) {
|
||||||
|
errorString = tr("Could not parse enabled attribute.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (xmlReader.readNextStartElement()) {
|
||||||
|
if (xmlReader.name() == "setting") {
|
||||||
|
QString name = xmlReader.attributes().value("name").toString();
|
||||||
|
int level = xmlReader.attributes().value("level").toInt(&ok);
|
||||||
|
if (ok) {
|
||||||
|
int period = xmlReader.attributes().value("period").toInt(&ok);
|
||||||
|
if (ok && updateLogWrapper(name, level, period)) {
|
||||||
|
} else {
|
||||||
|
errorString = tr("Could not parse period attribute, or object with name '%1' could not be found.").arg(name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
errorString = tr("Could not parse level attribute on setting '%1'").arg(name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xmlReader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
xmlReader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
if (!xmlReader.atEnd() && (xmlReader.hasError() || !errorString.isEmpty())) {
|
||||||
|
QMessageBox::warning(NULL, tr("Settings file corrupt."),
|
||||||
|
tr("The file loaded is not in the correct format.\nPlease check the file.\n%1")
|
||||||
|
.arg(xmlReader.hasError() ? xmlReader.errorString() : errorString),
|
||||||
|
QMessageBox::Ok);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xmlFile.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FlightLogManager::saveSettings()
|
void FlightLogManager::saveSettings()
|
||||||
{
|
{
|
||||||
QString xmlFilter = tr("XML file %1").arg("(*.xml)");
|
QString xmlFilter = tr("XML file %1").arg("(*.xml)");
|
||||||
QString fileName = QFileDialog::getSaveFileName(NULL, tr("Save Log Settings"),
|
QString fileName = QFileDialog::getSaveFileName(NULL, tr("Save Log Settings"),
|
||||||
QString("OP-FlightLogSettings"), QString("%1").arg(xmlFilter));
|
QDir::homePath(), QString("%1").arg(xmlFilter));
|
||||||
if (!fileName.isEmpty()) {
|
if (!fileName.isEmpty()) {
|
||||||
if (!fileName.endsWith(".xml")) {
|
if (!fileName.endsWith(".xml")) {
|
||||||
fileName.append(".xml");
|
fileName.append(".xml");
|
||||||
@ -404,6 +461,7 @@ void FlightLogManager::saveSettings()
|
|||||||
xmlWriter.writeStartDocument("1.0", true);
|
xmlWriter.writeStartDocument("1.0", true);
|
||||||
xmlWriter.writeComment("This file was created by the flight log settings function in OpenPilot GCS.");
|
xmlWriter.writeComment("This file was created by the flight log settings function in OpenPilot GCS.");
|
||||||
xmlWriter.writeStartElement("settings");
|
xmlWriter.writeStartElement("settings");
|
||||||
|
xmlWriter.writeAttribute("version", QString::number(LOG_SETTINGS_FILE_VERSION));
|
||||||
xmlWriter.writeAttribute("enabled", QString::number(m_loggingEnabled));
|
xmlWriter.writeAttribute("enabled", QString::number(m_loggingEnabled));
|
||||||
foreach(UAVOLogSettingsWrapper * wrapper, m_uavoEntries) {
|
foreach(UAVOLogSettingsWrapper * wrapper, m_uavoEntries) {
|
||||||
xmlWriter.writeStartElement("setting");
|
xmlWriter.writeStartElement("setting");
|
||||||
@ -456,7 +514,9 @@ void FlightLogManager::setupUAVOWrappers()
|
|||||||
UAVObject *object = objectList.at(0);
|
UAVObject *object = objectList.at(0);
|
||||||
|
|
||||||
if (!object->isMetaDataObject() && !object->isSettingsObject()) {
|
if (!object->isMetaDataObject() && !object->isSettingsObject()) {
|
||||||
m_uavoEntries.append(new UAVOLogSettingsWrapper(object));
|
UAVOLogSettingsWrapper *wrapper = new UAVOLogSettingsWrapper(object);
|
||||||
|
m_uavoEntries.append(wrapper);
|
||||||
|
m_uavoEntriesHash[wrapper->name()] = wrapper;
|
||||||
qDebug() << objectList.at(0)->getName();
|
qDebug() << objectList.at(0)->getName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -484,6 +544,18 @@ void FlightLogManager::connectionStatusChanged()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FlightLogManager::updateLogWrapper(QString name, int level, int period)
|
||||||
|
{
|
||||||
|
UAVOLogSettingsWrapper *wrapper = m_uavoEntriesHash[name];
|
||||||
|
if (wrapper) {
|
||||||
|
wrapper->setSetting(level);
|
||||||
|
wrapper->setPeriod(period);
|
||||||
|
qDebug() << "Wrapper" << name << ", level" << level << ", period" << period;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
ExtendedDebugLogEntry::ExtendedDebugLogEntry() : DebugLogEntry(),
|
ExtendedDebugLogEntry::ExtendedDebugLogEntry() : DebugLogEntry(),
|
||||||
m_object(0)
|
m_object(0)
|
||||||
{}
|
{}
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QHash>
|
||||||
#include <QQmlListProperty>
|
#include <QQmlListProperty>
|
||||||
#include <QSemaphore>
|
#include <QSemaphore>
|
||||||
#include <QXmlStreamWriter>
|
#include <QXmlStreamWriter>
|
||||||
@ -284,6 +285,7 @@ private slots:
|
|||||||
void setupLogSettings();
|
void setupLogSettings();
|
||||||
void setupLogStatuses();
|
void setupLogStatuses();
|
||||||
void connectionStatusChanged();
|
void connectionStatusChanged();
|
||||||
|
bool updateLogWrapper(QString name, int level, int period);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UAVObjectManager *m_objectManager;
|
UAVObjectManager *m_objectManager;
|
||||||
@ -299,12 +301,14 @@ private:
|
|||||||
QStringList m_logStatuses;
|
QStringList m_logStatuses;
|
||||||
|
|
||||||
QList<UAVOLogSettingsWrapper *> m_uavoEntries;
|
QList<UAVOLogSettingsWrapper *> m_uavoEntries;
|
||||||
|
QHash<QString, UAVOLogSettingsWrapper *> m_uavoEntriesHash;
|
||||||
|
|
||||||
void exportToOPL(QString fileName);
|
void exportToOPL(QString fileName);
|
||||||
void exportToCSV(QString fileName);
|
void exportToCSV(QString fileName);
|
||||||
void exportToXML(QString fileName);
|
void exportToXML(QString fileName);
|
||||||
|
|
||||||
static const int UAVTALK_TIMEOUT = 4000;
|
static const int UAVTALK_TIMEOUT = 4000;
|
||||||
|
static const int LOG_SETTINGS_FILE_VERSION = 1;
|
||||||
bool m_disableControls;
|
bool m_disableControls;
|
||||||
bool m_disableExport;
|
bool m_disableExport;
|
||||||
bool m_cancelDownload;
|
bool m_cancelDownload;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user