Skip to content
Snippets Groups Projects
Commit 064c9202 authored by Rainer Kartmann's avatar Rainer Kartmann
Browse files

Merge branch 'skills/optionals-in-manager-gui' into 'master'

Skills: Optionals in manager gui

See merge request !395
parents 4bde3153 058bee70
No related branches found
No related tags found
No related merge requests found
......@@ -20,6 +20,7 @@ namespace armarx::skills::provider
root_profile_params.some_float = 5;
root_profile_params.some_int = 42;
root_profile_params.some_text = "YOLO";
root_profile_params.some_optional_text = "OPTIONAL";
root_profile_params.some_list_of_matrices.push_back(Eigen::Matrix3f::Zero());
root_profile_params.some_matrix = Eigen::Matrix3f::Zero();
......
......@@ -22,6 +22,9 @@
<ObjectChild key='some_text'>
<String />
</ObjectChild>
<ObjectChild key='some_optional_text'>
<String optional="True" />
</ObjectChild>
<ObjectChild key='some_list_of_matrices'>
<List>
......
......@@ -90,6 +90,16 @@ namespace armarx
createdAron = createdAronDict;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
unsigned int x = 0;
for (const auto& [key, value] : i->getMemberTypes())
{
......@@ -113,6 +123,16 @@ namespace armarx
createdAron = createdAronDict;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
for (int x = 0; x < el->childCount(); ++x)
{
auto it = el->child(x);
......@@ -134,12 +154,23 @@ namespace armarx
ARMARX_TRACE;
auto createdAronList = std::make_shared<aron::data::List>(i->getPath());
createdAron = createdAronList;
auto* elem = parentItem->child(index);
auto* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
auto childrenTypes = i->getChildren();
ARMARX_CHECK(childrenTypes.size() == 1);
for (int j = 0; j < elem->childCount(); ++j)
for (int j = 0; j < el->childCount(); ++j)
{
AronTreeWidgetConverterVisitor convVisitor(elem, j);
AronTreeWidgetConverterVisitor convVisitor(el, j);
aron::type::visit(convVisitor, childrenTypes[0]);
handleErrors(convVisitor);
......@@ -156,11 +187,21 @@ namespace armarx
ARMARX_TRACE;
auto createdAronPair = std::make_shared<aron::data::List>(i->getPath());
createdAron = createdAronPair;
auto* elem = parentItem->child(index);
auto* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
for (int j = 0; j < 2; ++j)
{
AronTreeWidgetConverterVisitor convVisitor(elem, j);
AronTreeWidgetConverterVisitor convVisitor(el, j);
handleErrors(convVisitor);
if (convVisitor.createdAron && convVisitor.isConversionSuccessful())
{
......@@ -177,6 +218,16 @@ namespace armarx
createdAron = createdAronList;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
for (int x = 0; x < el->childCount(); ++x)
{
auto* it = el->child(x);
......@@ -242,11 +293,22 @@ namespace armarx
createdMatrix->setShape({i->getRows(), i->getCols(), dataSize});
int totalByteSize = i->getRows() * i->getCols() * dataSize;
createdAron = createdMatrix;
auto* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
auto* currElem = parentItem->child(index);
auto* rootWidget = currElem->treeWidget();
auto* rootWidget = el->treeWidget();
ARMARX_CHECK(rootWidget);
auto* widget = rootWidget->itemWidget(currElem, 1);
auto* widget = rootWidget->itemWidget(el, 1);
auto* matrixWidget = EditMatrixWidget::DynamicCastAndCheck(widget);
handleErrors(matrixWidget->hasParseErrors());
......@@ -280,8 +342,19 @@ namespace armarx
int dataSize = i->getElementType() == aron::type::quaternion::ElementType::FLOAT32 ? 4 : 8;
createdQuat->setShape({1, 4, dataSize});
createdQuat->setType(i->getFullName());
auto* currTreeElem = parentItem->child(index);
auto* itemWidget = currTreeElem->treeWidget()->itemWidget(currTreeElem, 1);
auto* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
auto* itemWidget = el->treeWidget()->itemWidget(el, 1);
auto* quatWidget = QuaternionWidget::DynamicCastAndCheck(itemWidget);
// error handling
......@@ -320,6 +393,17 @@ namespace armarx
{
ARMARX_TRACE;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
auto* genericWidget = el->treeWidget()->itemWidget(el, 1);
auto* intEnumWidget = IntEnumWidget::DynamicCastAndCheck(genericWidget);
if (!intEnumWidget)
......@@ -341,6 +425,16 @@ namespace armarx
createdAron = createdAronInt;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
std::string str = el->text(1).toStdString();
if (str.empty())
{
......@@ -370,6 +464,16 @@ namespace armarx
createdAron = createdAronLong;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
std::string str = el->text(1).toStdString();
if (str.empty())
{
......@@ -398,6 +502,16 @@ namespace armarx
createdAron = createdAronFloat;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
std::string str = el->text(1).toStdString();
if (str.empty())
{
......@@ -425,6 +539,16 @@ namespace armarx
createdAron = createdAronDouble;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
std::string str = el->text(1).toStdString();
if (str.empty())
{
......@@ -452,6 +576,16 @@ namespace armarx
createdAron = createdAronBool;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
std::string str = el->text(1).toStdString();
if (str.empty())
{
......@@ -479,6 +613,16 @@ namespace armarx
createdAron = createdAronString;
QTreeWidgetItem* el = parentItem->child(index);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
// its a maybetype. We have to check the state
if (el->checkState(1) == Qt::CheckState::Unchecked)
{
createdAron = nullptr;
return;
}
}
std::string str = el->text(1).toStdString();
createdAronString->setValue(str);
}
......
......@@ -101,6 +101,11 @@ namespace armarx
createdQWidgetItem =
new AronTreeWidgetItem(isDictChild, editableValue, QString::fromStdString(key), i);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
createdQWidgetItem->setCheckState(1, Qt::CheckState::Unchecked);
}
createdQWidgetItem->setText(1, QString::fromStdString(defaul));
createdQWidgetItem->setText(2, QString::fromStdString(i->getShortName()));
createdQWidgetItem->setText(
......@@ -129,6 +134,12 @@ namespace armarx
createdQWidgetItem =
new AronTreeWidgetItem(editableValue, false, QString::fromStdString(key), i);
if (i->getMaybe() != armarx::aron::type::Maybe::NONE)
{
createdQWidgetItem->setCheckState(1, Qt::CheckState::Unchecked);
}
parentOfCreatedObj->addChild(createdQWidgetItem);
for (const auto& [key, value] : i->getMemberTypes())
......@@ -149,6 +160,7 @@ namespace armarx
// The DictType has only one member, its key-type. This also must be present
ARMARX_CHECK_EQUAL(i->getChildren().size(), 1);
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::PairPtr& pair)
{
......@@ -167,6 +179,7 @@ namespace armarx
}
}
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::TuplePtr& tuple)
{
......@@ -185,6 +198,7 @@ namespace armarx
}
}
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::ListPtr& i)
{
......@@ -192,6 +206,7 @@ namespace armarx
auto txt = misc::generateNumElementsText(0);
createdQWidgetItem->setText(1, txt);
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::NDArrayPtr& i)
{
......@@ -233,6 +248,7 @@ namespace armarx
i->getRows(), i->getCols(), i->getElementType(), createdQWidgetItem);
toplevelWidget->setItemWidget(createdQWidgetItem, 1, matWidget);
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::QuaternionPtr& i)
{
......@@ -257,16 +273,19 @@ namespace armarx
new QuaternionWidget(i->getElementType(), createdQWidgetItem);
toplevelWidget->setItemWidget(createdQWidgetItem, 1, quatWidget);
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::ImagePtr& i)
{
insertNewTreeViewWidget(i, "");
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::PointCloudPtr& i)
{
insertNewTreeViewWidget(i, "");
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::IntEnumPtr& i)
{
......@@ -278,36 +297,42 @@ namespace armarx
IntEnumWidget* widget = new IntEnumWidget(i, createdQWidgetItem);
createdQWidgetItem->treeWidget()->setItemWidget(createdQWidgetItem, 1, widget);
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::IntPtr& i)
{
editableValue = true;
insertNewTreeViewWidget(i, "0");
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::LongPtr& i)
{
editableValue = true;
insertNewTreeViewWidget(i, "0");
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::FloatPtr& i)
{
editableValue = true;
insertNewTreeViewWidget(i, "0.0");
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::DoublePtr& i)
{
editableValue = true;
insertNewTreeViewWidget(i, "0.0");
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::BoolPtr& i)
{
editableValue = true;
insertNewTreeViewWidget(i, "false");
}
void
AronTreeWidgetCreatorVisitor::visitAronVariant(const aron::type::StringPtr& i)
{
......
......@@ -31,7 +31,6 @@
#include "AronTreeWidgetContextMenu.h"
#include "AronTreeWidgetCreator.h"
template <typename T>
std::string
usString(T number, size_t precision = 3)
......@@ -44,7 +43,6 @@ usString(T number, size_t precision = 3)
return ss.str();
}
//visitors
namespace armarx
{
......@@ -101,7 +99,6 @@ namespace armarx
}
}
void
AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::DictPtr& i)
{
......@@ -109,7 +106,7 @@ namespace armarx
if (i->getPath().size() == 0 ||
checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
{
QTreeWidgetItem* el = parentItem->child(index);
AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
auto* aronTreeWidget = AronTreeWidgetItem::DynamicCastAndCheck(el);
// allocate enough child items
adjustNumberOfChildren(aronTreeWidget, i->childrenSize());
......@@ -123,7 +120,11 @@ namespace armarx
AronTreeWidgetSetterVisitor v(el, x++);
aron::data::visit(v, value);
}
return;
if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE)
{
el->setCheckState(1, Qt::CheckState::Checked);
}
}
}
......@@ -132,7 +133,7 @@ namespace armarx
{
if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
{
QTreeWidgetItem* el = parentItem->child(index);
AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
auto* aronTreeWidget = AronTreeWidgetItem::DynamicCastAndCheck(el);
adjustNumberOfChildren(aronTreeWidget, i->childrenSize());
......@@ -154,10 +155,14 @@ namespace armarx
auto currFont = aronTreeWidget->font(1);
currFont.setItalic(true);
aronTreeWidget->setFont(1, currFont);
if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE)
{
el->setCheckState(1, Qt::CheckState::Checked);
}
}
}
void
visitMatrix(EditMatrixWidget* matrixWidget,
const std::shared_ptr<armarx::aron::type::Matrix>& matrixType,
......@@ -215,6 +220,7 @@ namespace armarx
}
}
}
void
visitQuaternion(QuaternionWidget* quatWidget,
std::shared_ptr<armarx::aron::type::Quaternion>& quatType,
......@@ -256,16 +262,16 @@ namespace armarx
AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::NDArrayPtr& arr)
{
// Matrices are handled as NDArray. Raw ndarrays cannot be created currently
auto* castedEl = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
ARMARX_CHECK(castedEl);
auto* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
ARMARX_CHECK(el);
auto matrixCast = aron::type::Matrix::DynamicCast(castedEl->aronType);
auto quaternionCast = aron::type::Quaternion::DynamicCast(castedEl->aronType);
auto matrixCast = aron::type::Matrix::DynamicCast(el->aronType);
auto quaternionCast = aron::type::Quaternion::DynamicCast(el->aronType);
auto* rootWidget = castedEl->treeWidget();
auto* rootWidget = el->treeWidget();
ARMARX_CHECK(rootWidget);
auto* matrixWidget = EditMatrixWidget::DynamicCast(rootWidget->itemWidget(castedEl, 1));
auto* quaternionWidget = QuaternionWidget::DynamicCast(rootWidget->itemWidget(castedEl, 1));
auto* matrixWidget = EditMatrixWidget::DynamicCast(rootWidget->itemWidget(el, 1));
auto* quaternionWidget = QuaternionWidget::DynamicCast(rootWidget->itemWidget(el, 1));
if (matrixCast && matrixWidget)
{
......@@ -280,6 +286,11 @@ namespace armarx
ARMARX_ERROR
<< "we do not support raw NDArrays. Ask Fabian Peller for more information.";
}
if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE)
{
el->setCheckState(1, Qt::CheckState::Checked);
}
}
void
......@@ -287,7 +298,7 @@ namespace armarx
{
if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
{
QTreeWidgetItem* el = parentItem->child(index);
AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
auto* enumWidget = IntEnumWidget::DynamicCast(el->treeWidget()->itemWidget(el, 1));
auto newText = QString::fromStdString(usString<int>(i->getValue()));
if (enumWidget)
......@@ -300,6 +311,11 @@ namespace armarx
// Its just an int. -> do the QTreeWidgetItem call
el->setText(1, newText);
}
if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE)
{
el->setCheckState(1, Qt::CheckState::Checked);
}
}
}
......@@ -308,8 +324,13 @@ namespace armarx
{
if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
{
QTreeWidgetItem* el = parentItem->child(index);
AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
el->setText(1, QString::fromStdString(usString<long>(i->getValue())));
if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE)
{
el->setCheckState(1, Qt::CheckState::Checked);
}
}
}
......@@ -318,8 +339,13 @@ namespace armarx
{
if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
{
QTreeWidgetItem* el = parentItem->child(index);
AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
el->setText(1, QString::fromStdString(usString<float>(i->getValue())));
if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE)
{
el->setCheckState(1, Qt::CheckState::Checked);
}
}
}
......@@ -328,8 +354,13 @@ namespace armarx
{
if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
{
QTreeWidgetItem* el = parentItem->child(index);
AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
el->setText(1, QString::fromStdString(usString<double>(i->getValue())));
if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE)
{
el->setCheckState(1, Qt::CheckState::Checked);
}
}
}
......@@ -338,8 +369,13 @@ namespace armarx
{
if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
{
QTreeWidgetItem* el = parentItem->child(index);
AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
el->setText(1, QString::fromStdString(usString<bool>(i->getValue())));
if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE)
{
el->setCheckState(1, Qt::CheckState::Checked);
}
}
}
......@@ -348,8 +384,13 @@ namespace armarx
{
if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
{
QTreeWidgetItem* el = parentItem->child(index);
AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index));
el->setText(1, QString::fromStdString(i->getValue()));
if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE)
{
el->setCheckState(1, Qt::CheckState::Checked);
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment