Skip to content
Snippets Groups Projects

Fix: segfault in skill gui

Merged Peter Albrecht requested to merge fix/skill-gui-segfault into master
2 unresolved threads
Files
4
@@ -75,16 +75,19 @@ namespace armarx::skills::gui
void
AronTreeWidgetConverterVisitor::handleErrors(bool ownFault)
{
ARMARX_TRACE;
isDirectError = ownFault;
auto* aronItem = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
ARMARX_CHECK(aronItem);
aronItem->setValueErrorState(isDirectError, false);
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::ObjectPtr& i)
{
ARMARX_TRACE;
auto createdAronDict = std::make_shared<aron::data::Dict>(i->getPath());
createdAron = createdAronDict;
@@ -113,11 +116,13 @@ namespace armarx::skills::gui
createdAronDict->addElement(key, v.createdAron);
}
}
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::DictPtr& i)
{
ARMARX_TRACE;
auto createdAronDict = std::make_shared<aron::data::Dict>(i->getPath());
createdAron = createdAronDict;
@@ -146,11 +151,13 @@ namespace armarx::skills::gui
createdAronDict->addElement(key, v.createdAron);
}
}
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::ListPtr& i)
{
ARMARX_TRACE;
auto createdAronList = std::make_shared<aron::data::List>(i->getPath());
createdAron = createdAronList;
@@ -179,11 +186,13 @@ namespace armarx::skills::gui
createdAronList->addElement(convVisitor.createdAron);
}
}
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::PairPtr& i)
{
ARMARX_TRACE;
auto createdAronPair = std::make_shared<aron::data::List>(i->getPath());
createdAron = createdAronPair;
@@ -208,11 +217,13 @@ namespace armarx::skills::gui
createdAronPair->addElement(convVisitor.createdAron);
}
}
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::TuplePtr& i)
{
ARMARX_TRACE;
auto createdAronList = std::make_shared<aron::data::List>(i->getPath());
createdAron = createdAronList;
@@ -240,6 +251,7 @@ namespace armarx::skills::gui
createdAronList->addElement(v.createdAron);
}
}
}
void
@@ -252,6 +264,7 @@ namespace armarx::skills::gui
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::MatrixPtr& i)
{
ARMARX_TRACE;
auto createdMatrix = std::make_shared<aron::data::NDArray>(i->getPath());
int dataSize = 0;
@@ -276,6 +289,7 @@ namespace armarx::skills::gui
break;
};
// UGLY HACK: FIX ME!!!
switch (i->getElementType())
{
@@ -308,6 +322,7 @@ namespace armarx::skills::gui
break;
};
createdMatrix->setShape({i->getRows(), i->getCols(), dataSize});
int totalByteSize = i->getRows() * i->getCols() * dataSize;
createdAron = createdMatrix;
@@ -323,17 +338,21 @@ namespace armarx::skills::gui
}
}
auto* rootWidget = el->treeWidget();
ARMARX_CHECK(rootWidget);
auto* widget = rootWidget->itemWidget(el, 1);
ARMARX_CHECK(rootWidget);
auto* matrixWidget = EditMatrixWidget::DynamicCastAndCheck(widget);
ARMARX_CHECK(matrixWidget);
handleErrors(matrixWidget->hasParseErrors());
if (matrixWidget->hasParseErrors())
{
return;
}
// write to aron data
std::vector<unsigned char> elems;
elems.reserve(totalByteSize);
@@ -349,11 +368,13 @@ namespace armarx::skills::gui
}
}
createdMatrix->setData(totalByteSize, elems.data());
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::QuaternionPtr& i)
{
ARMARX_TRACE;
auto createdQuat = std::make_shared<aron::data::NDArray>(i->getPath());
createdAron = createdQuat;
@@ -390,6 +411,7 @@ namespace armarx::skills::gui
<< "serialized quaternions did not return byte sequence of correct length!";
}
createdQuat->setData(serialized.size(), serialized.data());
}
void
@@ -409,6 +431,7 @@ namespace armarx::skills::gui
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::IntEnumPtr& i)
{
ARMARX_TRACE;
QTreeWidgetItem* el = parentItem->child(index);
@@ -433,11 +456,13 @@ namespace armarx::skills::gui
std::tie(success, createdAron) = intEnumWidget->parseToAron();
handleErrors(!success);
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::IntPtr& i)
{
ARMARX_TRACE;
auto createdAronInt = std::make_shared<aron::data::Int>(i->getPath());
createdAron = createdAronInt;
@@ -472,11 +497,13 @@ namespace armarx::skills::gui
return;
}
handleErrors(false);
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::LongPtr& i)
{
ARMARX_TRACE;
auto createdAronLong = std::make_shared<aron::data::Long>(i->getPath());
createdAron = createdAronLong;
@@ -510,11 +537,13 @@ namespace armarx::skills::gui
return;
}
handleErrors(false);
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::FloatPtr& i)
{
ARMARX_TRACE;
auto createdAronFloat = std::make_shared<aron::data::Float>(i->getPath());
createdAron = createdAronFloat;
@@ -547,11 +576,13 @@ namespace armarx::skills::gui
return;
}
handleErrors(false);
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::DoublePtr& i)
{
ARMARX_TRACE;
auto createdAronDouble = std::make_shared<aron::data::Double>(i->getPath());
createdAron = createdAronDouble;
@@ -584,11 +615,13 @@ namespace armarx::skills::gui
return;
}
handleErrors(false);
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::BoolPtr& i)
{
ARMARX_TRACE;
auto createdAronBool = std::make_shared<aron::data::Bool>(i->getPath());
createdAron = createdAronBool;
@@ -621,16 +654,23 @@ namespace armarx::skills::gui
return;
}
handleErrors(false);
}
void
AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::StringPtr& i)
{
ARMARX_TRACE;
auto createdAronString = std::make_shared<aron::data::String>(i->getPath());
createdAron = createdAronString;
QTreeWidgetItem* el = parentItem->child(index);
if (el == nullptr)
{
return;
}
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
@@ -643,6 +683,7 @@ namespace armarx::skills::gui
std::string str = el->text(1).toStdString();
createdAronString->setValue(str);
}
void
Loading