1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-28 17:54:15 +01:00

GCS: UAV Settings Export: added support for simple *.xml files.

UAV Settings files (*.uav) now include option lists for enum fields.
Simple XML files (*.xml) contain only subset of fields (name and values).

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2865 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
osnwt 2011-02-23 20:27:19 +00:00 committed by osnwt
parent 606cc46ea1
commit bd665790c2

View File

@ -43,17 +43,9 @@
// for XML object // for XML object
#include <QDomDocument> #include <QDomDocument>
// for file dialog // for file dialog and error messages
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox>
// Define USE_QFILEDIALOG to use Qt native QFileDialog() call.
// Sometimes it leaves a GUI artifact (text box with a file name) on Windows.
// If this is not defined then getSaveFileName() will be used instead.
// It calls system native dialog function which should be free of that.
//#define USE_QFILEDIALOG
// Define this to export only values w/o extra info
//#define EXPORT_VALUES_ONLY
UAVSettingsImportExportPlugin::UAVSettingsImportExportPlugin() UAVSettingsImportExportPlugin::UAVSettingsImportExportPlugin()
{ {
@ -101,7 +93,38 @@ void UAVSettingsImportExportPlugin::extensionsInitialized()
// TODO: import function is not implemented yet // TODO: import function is not implemented yet
void UAVSettingsImportExportPlugin::importExport() void UAVSettingsImportExportPlugin::importExport()
{ {
// generate XML to export // available formats
enum { UNDEF, UAV, XML, INI } fileFormat = UNDEF;
// ask for file name and export format
QString fileName;
QString filters = tr("UAV Settings files (*.uav)")
+ ";;" + tr("Simple XML files (*.xml)")
+ ";;" + tr("INI files (*.ini)");
fileName = QFileDialog::getSaveFileName(0, tr("Save UAV Settings File As"), "", filters);
if (fileName.isEmpty()) {
return;
}
// check export file format
QFileInfo fileInfo(fileName);
QString fileType = fileInfo.suffix().toLower();
if (fileType == "uav") {
fileFormat = UAV;
} else if (fileType == "xml") {
fileFormat = XML;
} else {
QMessageBox mb(QMessageBox::Information,
tr("UAV Settings Export"),
tr("Unsupported export file format: '") + fileType + "'",
QMessageBox::Ok);
mb.exec();
return;
}
// generate an XML first (used for all export formats as a formatted data source)
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>(); UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
@ -120,12 +143,13 @@ void UAVSettingsImportExportPlugin::importExport()
QDomElement o = doc.createElement("object"); QDomElement o = doc.createElement("object");
o.setAttribute("name", obj->getName()); o.setAttribute("name", obj->getName());
o.setAttribute("id", QString("0x")+ QString().setNum(obj->getObjID(),16).toUpper()); o.setAttribute("id", QString("0x")+ QString().setNum(obj->getObjID(),16).toUpper());
#ifndef EXPORT_VALUES_ONLY if (fileFormat == UAV) {
QDomElement d = doc.createElement("description"); QDomElement d = doc.createElement("description");
QDomText t = doc.createTextNode(obj->getDescription().remove("@Ref ", Qt::CaseInsensitive)); QDomText t = doc.createTextNode(obj->getDescription().remove("@Ref ", Qt::CaseInsensitive));
d.appendChild(t); d.appendChild(t);
o.appendChild(d); o.appendChild(d);
#endif }
// iterate over fields // iterate over fields
QList<UAVObjectField*> fieldList = obj->getFields(); QList<UAVObjectField*> fieldList = obj->getFields();
@ -142,47 +166,29 @@ void UAVSettingsImportExportPlugin::importExport()
f.setAttribute("name", field->getName()); f.setAttribute("name", field->getName());
f.setAttribute("values", vals); f.setAttribute("values", vals);
#ifndef EXPORT_VALUES_ONLY if (fileFormat == UAV) {
f.setAttribute("type", field->getTypeAsString()); f.setAttribute("type", field->getTypeAsString());
f.setAttribute("units", field->getUnits()); f.setAttribute("units", field->getUnits());
f.setAttribute("elements", nelem); f.setAttribute("elements", nelem);
#endif if (field->getType() == UAVObjectField::ENUM) {
f.setAttribute("options", field->getOptions().join(","));
}
}
o.appendChild(f); o.appendChild(f);
} }
root.appendChild(o); root.appendChild(o);
} }
} }
} }
// save file
QString xml = doc.toString(4); QString xml = doc.toString(4);
// save XML to a file QFile file(fileName);
QString filters = tr("UAVSettings files (*.uav);;XML files (*.xml);;All files (*)");
#ifdef USE_QFILEDIALOG
QFileDialog *fd = new QFileDialog();
fd->setAcceptMode(QFileDialog::AcceptSave);
fd->setNameFilter(filters);
fd->setDefaultSuffix("uav");
fd->exec();
if ((fd->result() == QFileDialog::Accepted) && (fd->selectedFiles().size() == 1)) {
QFile file(fd->selectedFiles().first());
if (file.open(QIODevice::WriteOnly)) { if (file.open(QIODevice::WriteOnly)) {
file.write(xml.toAscii()); file.write(xml.toAscii());
file.close(); file.close();
} }
}
#else
QString fn = QFileDialog::getSaveFileName(0, tr("Save UAVSettings File As"), "", filters);
if (!fn.isEmpty()) {
QFile file(fn);
if (file.open(QIODevice::WriteOnly)) {
file.write(xml.toAscii());
file.close();
}
}
#endif // USE_QFILEDIALOG
} }
void UAVSettingsImportExportPlugin::shutdown() void UAVSettingsImportExportPlugin::shutdown()