From bd665790c2c1215fffcc9ec815e8851be755f36e Mon Sep 17 00:00:00 2001 From: osnwt Date: Wed, 23 Feb 2011 20:27:19 +0000 Subject: [PATCH] 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 --- .../uavsettingsimportexport.cpp | 104 +++++++++--------- 1 file changed, 55 insertions(+), 49 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.cpp b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.cpp index a0df7910c..c1216ba34 100644 --- a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.cpp +++ b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.cpp @@ -43,17 +43,9 @@ // for XML object #include -// for file dialog +// for file dialog and error messages #include - -// 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 +#include UAVSettingsImportExportPlugin::UAVSettingsImportExportPlugin() { @@ -101,7 +93,38 @@ void UAVSettingsImportExportPlugin::extensionsInitialized() // TODO: import function is not implemented yet 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(); UAVObjectManager *objManager = pm->getObject(); @@ -120,12 +143,13 @@ void UAVSettingsImportExportPlugin::importExport() QDomElement o = doc.createElement("object"); o.setAttribute("name", obj->getName()); o.setAttribute("id", QString("0x")+ QString().setNum(obj->getObjID(),16).toUpper()); -#ifndef EXPORT_VALUES_ONLY - QDomElement d = doc.createElement("description"); - QDomText t = doc.createTextNode(obj->getDescription().remove("@Ref ", Qt::CaseInsensitive)); - d.appendChild(t); - o.appendChild(d); -#endif + if (fileFormat == UAV) { + QDomElement d = doc.createElement("description"); + QDomText t = doc.createTextNode(obj->getDescription().remove("@Ref ", Qt::CaseInsensitive)); + d.appendChild(t); + o.appendChild(d); + } + // iterate over fields QList fieldList = obj->getFields(); @@ -142,47 +166,29 @@ void UAVSettingsImportExportPlugin::importExport() f.setAttribute("name", field->getName()); f.setAttribute("values", vals); -#ifndef EXPORT_VALUES_ONLY - f.setAttribute("type", field->getTypeAsString()); - f.setAttribute("units", field->getUnits()); - f.setAttribute("elements", nelem); -#endif + if (fileFormat == UAV) { + f.setAttribute("type", field->getTypeAsString()); + f.setAttribute("units", field->getUnits()); + f.setAttribute("elements", nelem); + if (field->getType() == UAVObjectField::ENUM) { + f.setAttribute("options", field->getOptions().join(",")); + } + } o.appendChild(f); } root.appendChild(o); } } } + + // save file QString xml = doc.toString(4); - // save XML to a file - 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)) { - file.write(xml.toAscii()); - file.close(); - } + QFile file(fileName); + if (file.open(QIODevice::WriteOnly)) { + file.write(xml.toAscii()); + 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()