1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-30 15:52:12 +01:00

OP-799 removed Waypoint import export from uavsettingsimportexportfactory.cpp as it is handled by pathActionEditor

This commit is contained in:
Alessio Morale 2013-01-10 20:10:06 +01:00
parent 19c95a4f1b
commit 60eb36ab36
2 changed files with 49 additions and 288 deletions

View File

@ -87,25 +87,6 @@ UAVSettingsImportExportFactory::UAVSettingsImportExportFactory(QObject *parent):
cmd->action()->setText(tr("Export UAV Data..."));
ac->addAction(cmd, Core::Constants::G_HELP_HELP);
connect(cmd->action(), SIGNAL(triggered(bool)), this, SLOT(exportUAVData()));
ac = am->actionContainer(Core::Constants::M_FILE);
cmd = am->registerAction(new QAction(this),
"UAVSettingsImportExportPlugin.UAVWaypointsExport",
QList<int>() <<
Core::Constants::C_GLOBAL_ID);
cmd->action()->setText(tr("Export Waypoints..."));
ac->addAction(cmd, Core::Constants::G_FILE_SAVE);
connect(cmd->action(), SIGNAL(triggered(bool)), this, SLOT(exportWaypoints()));
ac = am->actionContainer(Core::Constants::M_FILE);
cmd = am->registerAction(new QAction(this),
"UAVSettingsImportExportPlugin.UAVWaypointsImport",
QList<int>() <<
Core::Constants::C_GLOBAL_ID);
cmd->action()->setText(tr("Import Waypoints..."));
ac->addAction(cmd, Core::Constants::G_FILE_SAVE);
connect(cmd->action(), SIGNAL(triggered(bool)), this, SLOT(importWaypoints()));
}
// Slot called by the menu manager on user action
@ -232,125 +213,6 @@ void UAVSettingsImportExportFactory::importUAVSettings()
swui.exec();
}
// Slot called by the menu manager on user action
void UAVSettingsImportExportFactory::importWaypoints()
{
// ask for file name
QString fileName;
QString filters = tr("Waypoint XML files (*.xml)");
fileName = QFileDialog::getOpenFileName(0, tr("Import waypoints"), "", filters);
if (fileName.isEmpty()) {
return;
}
// Now open the file
QFile file(fileName);
QDomDocument doc("UAVObjects");
file.open(QFile::ReadOnly|QFile::Text);
if (!doc.setContent(file.readAll())) {
QMessageBox msgBox;
msgBox.setText(tr("File Parsing Failed."));
msgBox.setInformativeText(tr("This file is not a correct XML file"));
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
return;
}
file.close();
// find the root of settings subtree
emit importAboutToBegin();
qDebug()<<"Import about to begin";
QDomElement root = doc.documentElement();
if (root.tagName() == "uavobjects") {
root = root.firstChildElement("waypoints");
}
if (root.isNull() || (root.tagName() != "waypoints")) {
QMessageBox msgBox;
msgBox.setText(tr("Wrong file contents"));
msgBox.setInformativeText(tr("This file does not contain waypoints"));
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
return;
}
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
QDomNode node = root.firstChild();
while (!node.isNull()) {
QDomElement e = node.toElement();
if (e.tagName() == "object") {
// - Read each object
QString uavObjectName = e.attribute("name");
uint uavObjectID = e.attribute("id").toUInt(NULL,16);
uint instId = e.attribute("instId").toUInt(NULL,10);
// Sanity Check:
UAVDataObject * obj = dynamic_cast<UAVDataObject*>(objManager->getObject(uavObjectName));
if (obj == NULL) {
// This object is unknown!
qDebug() << "Object unknown:" << uavObjectName << uavObjectID;
} else {
int numInstances = objManager->getNumInstances(obj->getObjID());
if (instId >= numInstances) {
obj = obj->clone(instId);
objManager->registerObject(obj);
qDebug() << "Cloned new object";
} else {
obj = dynamic_cast<UAVDataObject*>(objManager->getObject(uavObjectName, instId));
Q_ASSERT(obj);
qDebug() << "Setting existing object";
}
// - Update each field
// - Issue and "updated" command
bool error = false;
bool setError = false;
QDomNode field = node.firstChild();
while(!field.isNull()) {
QDomElement f = field.toElement();
if (f.tagName() == "field") {
UAVObjectField *uavfield = obj->getField(f.attribute("name"));
if (uavfield) {
QStringList list = f.attribute("values").split(",");
if (list.length() == 1) {
if (false == uavfield->checkValue(f.attribute("values"))) {
qDebug() << "checkValue returned false on: " << uavObjectName << f.attribute("values");
setError = true;
} else {
uavfield->setValue(f.attribute("values"));
}
} else {
// This is an enum:
int i = 0;
QStringList list = f.attribute("values").split(",");
foreach (QString element, list) {
if (false == uavfield->checkValue(element, i)) {
qDebug() << "checkValue(list) returned false on: " << uavObjectName << list;
setError = true;
} else {
uavfield->setValue(element,i);
}
i++;
}
}
} else {
error = true;
}
}
field = field.nextSibling();
}
}
}
node = node.nextSibling();
}
qDebug() << "End import";
}
// Create an XML document from UAVObject database
QString UAVSettingsImportExportFactory::createXMLDocument(const enum storedData what, const bool fullExport)
{
@ -396,7 +258,6 @@ QString UAVSettingsImportExportFactory::createXMLDocument(const enum storedData
// create settings and/or data elements
QDomElement settings = doc.createElement("settings");
QDomElement data = doc.createElement("data");
QDomElement waypoints = doc.createElement("waypoints");
switch (what)
{
@ -410,121 +271,61 @@ QString UAVSettingsImportExportFactory::createXMLDocument(const enum storedData
root.appendChild(data);
root.appendChild(settings);
break;
case Waypoints:
root.appendChild(waypoints);
break;
}
switch (what)
{
case Settings:
case Data:
case Both:
{
// iterate over settings objects
QList< QList<UAVDataObject*> > objList = objManager->getDataObjects();
foreach (QList<UAVDataObject*> list, objList) {
foreach (UAVDataObject *obj, list) {
if (((what == Settings) && obj->isSettings()) ||
((what == Data) && !obj->isSettings()) ||
(what == Both)) {
// iterate over settings objects
QList< QList<UAVDataObject*> > objList = objManager->getDataObjects();
foreach (QList<UAVDataObject*> list, objList) {
foreach (UAVDataObject *obj, list) {
if (((what == Settings) && obj->isSettings()) ||
((what == Data) && !obj->isSettings()) ||
(what == Both)) {
// add each object to the XML
QDomElement o = doc.createElement("object");
o.setAttribute("name", obj->getName());
o.setAttribute("id", QString("0x")+ QString().setNum(obj->getObjID(),16).toUpper());
if (fullExport) {
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<UAVObjectField*> fieldList = obj->getFields();
foreach (UAVObjectField* field, fieldList) {
QDomElement f = doc.createElement("field");
// iterate over values
QString vals;
quint32 nelem = field->getNumElements();
for (unsigned int n = 0; n < nelem; ++n) {
vals.append(QString("%1,").arg(field->getValue(n).toString()));
}
vals.chop(1);
f.setAttribute("name", field->getName());
f.setAttribute("values", vals);
if (fullExport) {
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);
}
// append to the settings or data element
if (obj->isSettings())
settings.appendChild(o);
else
data.appendChild(o);
}
}
}
}
break;
case Waypoints:
{
// iterate over waypoints until the first one that is set to Stop
QList<UAVObject*> list = objManager->getObjectInstances("Waypoint");
foreach (UAVObject *obj, list) {
// add each object to the XML
QDomElement o = doc.createElement("object");
o.setAttribute("name", obj->getName());
o.setAttribute("id", QString("0x")+ QString().setNum(obj->getObjID(),16).toUpper());
o.setAttribute("instId",QString().setNum(obj->getInstID()));
// iterate over fields
QList<UAVObjectField*> fieldList = obj->getFields();
foreach (UAVObjectField* field, fieldList) {
QDomElement f = doc.createElement("field");
// iterate over values
QString vals;
quint32 nelem = field->getNumElements();
for (unsigned int n = 0; n < nelem; ++n) {
vals.append(QString("%1,").arg(field->getValue(n).toString()));
}
vals.chop(1);
f.setAttribute("name", field->getName());
f.setAttribute("values", vals);
// add each object to the XML
QDomElement o = doc.createElement("object");
o.setAttribute("name", obj->getName());
o.setAttribute("id", QString("0x")+ QString().setNum(obj->getObjID(),16).toUpper());
if (fullExport) {
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(","));
}
QDomElement d = doc.createElement("description");
QDomText t = doc.createTextNode(obj->getDescription().remove("@Ref ", Qt::CaseInsensitive));
d.appendChild(t);
o.appendChild(d);
}
o.appendChild(f);
// iterate over fields
QList<UAVObjectField*> fieldList = obj->getFields();
foreach (UAVObjectField* field, fieldList) {
QDomElement f = doc.createElement("field");
// iterate over values
QString vals;
quint32 nelem = field->getNumElements();
for (unsigned int n = 0; n < nelem; ++n) {
vals.append(QString("%1,").arg(field->getValue(n).toString()));
}
vals.chop(1);
f.setAttribute("name", field->getName());
f.setAttribute("values", vals);
if (fullExport) {
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);
}
// append to the settings or data element
if (obj->isSettings())
settings.appendChild(o);
else
data.appendChild(o);
}
waypoints.appendChild(o);
// If this waypoint was stop, then don't add anymore
UAVObjectField *field = obj->getField("Action");
Q_ASSERT(field);
if(field && field->getValue().toString().compare("Stop") == 0)
break;
}
break;
}
}
return doc.toString(4);
@ -622,40 +423,3 @@ void UAVSettingsImportExportFactory::exportUAVData()
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}
/**
* Slot called by the menu manager on user action
*/
void UAVSettingsImportExportFactory::exportWaypoints()
{
// ask for file name
QString fileName;
QString filters = tr("UAVObjects XML files (*.xml)");
fileName = QFileDialog::getSaveFileName(0, tr("Save waypoint File As"), "", filters);
if (fileName.isEmpty()) {
return;
}
// generate an XML first (used for all export formats as a formatted data source)
QString xml = createXMLDocument(Waypoints, false);
// save file
QFile file(fileName);
if (file.open(QIODevice::WriteOnly) &&
(file.write(xml.toAscii()) != -1)) {
file.close();
} else {
QMessageBox::critical(0,
tr("UAV Data Export"),
tr("Unable to save data: ") + fileName,
QMessageBox::Ok);
return;
}
QMessageBox msgBox;
msgBox.setText(tr("Data saved."));
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}

View File

@ -38,16 +38,13 @@ public:
~UAVSettingsImportExportFactory();
private:
enum storedData { Settings, Data, Waypoints, Both };
enum storedData { Settings, Data, Both };
QString createXMLDocument(const enum storedData, const bool fullExport);
private slots:
void importUAVSettings();
void exportUAVSettings();
void exportUAVData();
void exportWaypoints();
void importWaypoints();
signals:
void importAboutToBegin();
void importEnded();