Skip to content
Snippets Groups Projects

StatechartEditor: CMake namespaced packages

Merged Fabian Reister requested to merge fix/statechart-editor-cmake-namespaced-packages into master
5 files
+ 379
191
Compare changes
  • Side-by-side
  • Inline
Files
5
@@ -23,35 +23,37 @@
*/
#include "GroupXmlReader.h"
#include <ArmarXCore/core/exceptions/local/FileIOException.h>
#include <filesystem>
#include <fstream>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <boost/regex.hpp>
#include <QFile>
#include <QFileInfo>
#include <QTextStream>
#include <filesystem>
#include <boost/regex.hpp>
#include <string>
#include <fstream>
#include <streambuf>
#include <stdexcept>
#include <ArmarXCore/core/exceptions/local/FileIOException.h>
using namespace armarx;
using namespace rapidxml;
GuiStatechartGroupXmlReader::GuiStatechartGroupXmlReader()
{
}
StatechartGroupPtr GuiStatechartGroupXmlReader::ReadXml(QString groupDefinitionFile, StateTreeNodePtr virtualRoot)
StatechartGroupPtr
GuiStatechartGroupXmlReader::ReadXml(QString groupDefinitionFile, StateTreeNodePtr virtualRoot)
{
RapidXmlReaderPtr wrapper = RapidXmlReader::FromFile(std::string(groupDefinitionFile.toUtf8().data()));
RapidXmlReaderPtr wrapper =
RapidXmlReader::FromFile(std::string(groupDefinitionFile.toUtf8().data()));
RapidXmlReaderNode xmlGroupNode = wrapper->getRoot("StatechartGroup");
QString name = QString::fromUtf8(xmlGroupNode.attribute_value("name").c_str());
QString description = QString::fromUtf8(xmlGroupNode.first_node_value_or_default("Description", "").c_str());
QString description =
QString::fromUtf8(xmlGroupNode.first_node_value_or_default("Description", "").c_str());
QString packageName = QString::fromUtf8(xmlGroupNode.attribute_value("package").c_str());
QString displayName = name;
@@ -59,13 +61,14 @@ StatechartGroupPtr GuiStatechartGroupXmlReader::ReadXml(QString groupDefinitionF
boost::match_results<std::string::const_iterator> match;
std::filesystem::path groupPath(groupDefinitionFile.toUtf8().data());
const std::string groupPathStr(groupPath.parent_path().c_str());
StatechartGroup::WriteAccess writable = QFileInfo(QString::fromStdString(groupPath.string())).permissions() & QFile::WriteUser ? StatechartGroup::eWritable : StatechartGroup::eReadOnly;
StatechartGroup::WriteAccess writable =
QFileInfo(QString::fromStdString(groupPath.string())).permissions() & QFile::WriteUser
? StatechartGroup::eWritable
: StatechartGroup::eReadOnly;
if (boost::regex_search(groupPathStr.begin(), groupPathStr.end(), match, projectNameRegex))
{
displayName += QString(" [%1]").arg(QString::fromStdString(std::string(match[1].first, match[1].second)));
}
displayName += QString(" [%1]").arg(packageName);
QList<QString> proxies;
@@ -82,18 +85,28 @@ StatechartGroupPtr GuiStatechartGroupXmlReader::ReadXml(QString groupDefinitionF
statechartGroupConfigurations[profileName] = configuration;
}
bool generateContext = xmlGroupNode.attribute_as_optional_bool("generateContext", "true", "false", false);
StatechartGroupPtr group(new StatechartGroup(groupDefinitionFile, QString::fromUtf8(groupPath.parent_path().c_str()), name, description, packageName,
proxies, generateContext, statechartGroupConfigurations, writable));
StateTreeNodePtr rootNode(new StateTreeNode(displayName, "", StateTreeNode::Group, virtualRoot, group, false));
bool generateContext =
xmlGroupNode.attribute_as_optional_bool("generateContext", "true", "false", false);
StatechartGroupPtr group(new StatechartGroup(groupDefinitionFile,
QString::fromUtf8(groupPath.parent_path().c_str()),
name,
description,
packageName,
proxies,
generateContext,
statechartGroupConfigurations,
writable));
StateTreeNodePtr rootNode(
new StateTreeNode(displayName, "", StateTreeNode::Group, virtualRoot, group, false));
ReadChildren(xmlGroupNode, rootNode, group);
group->setRootNode(rootNode);
ARMARX_LOG_S << "Reading done: " << groupDefinitionFile.toStdString() << flush;
return group;
}
QString GuiStatechartGroupXmlReader::ReadFileContents(QString path)
QString
GuiStatechartGroupXmlReader::ReadFileContents(QString path)
{
QFile f(path);
@@ -106,14 +119,16 @@ QString GuiStatechartGroupXmlReader::ReadFileContents(QString path)
return in.readAll();
}
void GuiStatechartGroupXmlReader::ReadChildren(RapidXmlReaderNode xmlNode, StateTreeNodePtr parentNode, StatechartGroupPtr group)
void
GuiStatechartGroupXmlReader::ReadChildren(RapidXmlReaderNode xmlNode,
StateTreeNodePtr parentNode,
StatechartGroupPtr group)
{
for (RapidXmlReaderNode xmlFolderNode : xmlNode.nodes("Folder"))
{
QString basename = QString::fromUtf8(xmlFolderNode.attribute_value("basename").c_str());
StateTreeNodePtr folderNode(new StateTreeNode(basename, basename, StateTreeNode::Folder, parentNode, group, false));
StateTreeNodePtr folderNode(
new StateTreeNode(basename, basename, StateTreeNode::Folder, parentNode, group, false));
parentNode->appendChild(folderNode);
ReadChildren(xmlFolderNode, folderNode, group);
}
@@ -121,9 +136,10 @@ void GuiStatechartGroupXmlReader::ReadChildren(RapidXmlReaderNode xmlNode, State
for (RapidXmlReaderNode xmlStateNode : xmlNode.nodes("State"))
{
QString filename = QString::fromUtf8(xmlStateNode.attribute_value("filename").c_str());
bool stateIsPublic = xmlStateNode.attribute_as_optional_bool("visibility", "public", "private", false);
StateTreeNodePtr stateNode(new StateTreeNode(filename, filename, StateTreeNode::State, parentNode, group, stateIsPublic));
bool stateIsPublic =
xmlStateNode.attribute_as_optional_bool("visibility", "public", "private", false);
StateTreeNodePtr stateNode(new StateTreeNode(
filename, filename, StateTreeNode::State, parentNode, group, stateIsPublic));
parentNode->appendChild(stateNode);
}
}
Loading