diff --git a/source/RobotAPI/components/skills/SkillProviderExample/Timeout.cpp b/source/RobotAPI/components/skills/SkillProviderExample/Timeout.cpp index 31dc03ae05caf0e2be256487e3a6a4294243e9d0..ddfc284c36e3da15ca34fdb657a9eeb6cc885f33 100644 --- a/source/RobotAPI/components/skills/SkillProviderExample/Timeout.cpp +++ b/source/RobotAPI/components/skills/SkillProviderExample/Timeout.cpp @@ -14,7 +14,7 @@ namespace armarx::skills::provider { return SkillDescription{.skillId = SkillID{.skillName = "Timeout"}, .description = "This fails with timeout reached", - .timeout = armarx::core::time::Duration::MilliSeconds(2000)}; + .timeout = armarx::core::time::Duration::Seconds(10)}; } PeriodicSkill::StepResult diff --git a/source/RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetController.cpp b/source/RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetController.cpp index 79d606639c320ffeba73918967d9a832de446e68..4cdccadf87864a3ab4147b9cb867f7fac2d9ae11 100644 --- a/source/RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetController.cpp +++ b/source/RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetController.cpp @@ -136,6 +136,7 @@ namespace armarx::skills::gui void AronTreeWidgetController::onTreeWidgetItemChanged(QTreeWidgetItem* item, int column) { + ARMARX_INFO << "Enter onTreeWidgetItemChanged"; tree->blockSignals(true); auto* aronElem = AronTreeWidgetItem::DynamicCast(item); @@ -143,21 +144,26 @@ namespace armarx::skills::gui { aronElem->onUserChange(column); } + + ARMARX_INFO << "After onUserChange"; // start conversion for entire tree -- this also sets the highlighting if (parent->childCount() == 1) { auto* aronTreeRoot = AronTreeWidgetItem::DynamicCast(parent->child(0)); - aronTreeRoot->resetError(); if (aronTreeRoot) { + ARMARX_INFO << "Looking at aronTreeRoot"; + aronTreeRoot->resetError(); AronTreeWidgetConverterVisitor v(parent, 0); aron::type::visit(v, type); + ARMARX_INFO << "After visiting"; aronTreeRoot->setValueErrorState(v.hasDirectError(), v.onlyChildFailedConversion()); } } // else perhaps the GUI was stopped or died. tree->blockSignals(false); + ARMARX_INFO << "Exit onTreeWidgetItemChanged"; } } // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetItem.cpp b/source/RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetItem.cpp index d76cee191fda8cb927548a795b53291875ae14e6..6f8b2f63e4f9daf3406c8f3d92420634aecd3606 100644 --- a/source/RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetItem.cpp +++ b/source/RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetItem.cpp @@ -149,6 +149,7 @@ namespace armarx::skills::gui void AronTreeWidgetItem::onUserChange(int changedColumn) { + ARMARX_INFO << "Enter onUserChange"; QTreeWidgetItem* qParent = QTreeWidgetItem::parent(); ARMARX_CHECK(qParent); AronTreeWidgetItem* aronParent = DynamicCast(qParent); @@ -172,6 +173,7 @@ namespace armarx::skills::gui preventIllegalKeyChange(); } } + ARMARX_INFO << "Exit onUserChange"; } void diff --git a/source/RobotAPI/libraries/skills_gui/aron_tree_widget/visitors/AronTreeWidgetConverter.cpp b/source/RobotAPI/libraries/skills_gui/aron_tree_widget/visitors/AronTreeWidgetConverter.cpp index 832258ea2c1083742ae9c0f13192e9f6903169ef..9ab53296e103fe40246f2b1ef67aca3d96a3d8d8 100644 --- a/source/RobotAPI/libraries/skills_gui/aron_tree_widget/visitors/AronTreeWidgetConverter.cpp +++ b/source/RobotAPI/libraries/skills_gui/aron_tree_widget/visitors/AronTreeWidgetConverter.cpp @@ -63,6 +63,7 @@ namespace armarx::skills::gui AronTreeWidgetConverterVisitor::handleErrors(AronTreeWidgetConverterVisitor childV, bool ownFault) { + ARMARX_INFO << "Enter HandleErrors1"; ARMARX_TRACE; isDirectError |= ownFault; hasTransitiveError |= childV.isDirectError || childV.hasTransitiveError; @@ -70,21 +71,25 @@ namespace armarx::skills::gui auto* aronItem = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); ARMARX_CHECK(aronItem); aronItem->setValueErrorState(isDirectError, hasTransitiveError); + ARMARX_INFO << "Exit HandleErrors1"; } void AronTreeWidgetConverterVisitor::handleErrors(bool ownFault) { + ARMARX_INFO << "Enter HandleErrors2"; ARMARX_TRACE; isDirectError = ownFault; auto* aronItem = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); ARMARX_CHECK(aronItem); aronItem->setValueErrorState(isDirectError, false); + ARMARX_INFO << "Exit HandleErrors2"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::ObjectPtr& i) { + ARMARX_INFO << "Enter Object Converter"; ARMARX_TRACE; auto createdAronDict = std::make_shared<aron::data::Dict>(i->getPath()); createdAron = createdAronDict; @@ -113,11 +118,13 @@ namespace armarx::skills::gui createdAronDict->addElement(key, v.createdAron); } } + ARMARX_INFO << "Exit Object Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::DictPtr& i) { + ARMARX_INFO << "Enter Dict Converter"; ARMARX_TRACE; auto createdAronDict = std::make_shared<aron::data::Dict>(i->getPath()); createdAron = createdAronDict; @@ -146,11 +153,13 @@ namespace armarx::skills::gui createdAronDict->addElement(key, v.createdAron); } } + ARMARX_INFO << "Exit Dict Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::ListPtr& i) { + ARMARX_INFO << "Enter List Converter"; ARMARX_TRACE; auto createdAronList = std::make_shared<aron::data::List>(i->getPath()); createdAron = createdAronList; @@ -179,11 +188,13 @@ namespace armarx::skills::gui createdAronList->addElement(convVisitor.createdAron); } } + ARMARX_INFO << "Exit List Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::PairPtr& i) { + ARMARX_INFO << "Enter Pair Converter"; ARMARX_TRACE; auto createdAronPair = std::make_shared<aron::data::List>(i->getPath()); createdAron = createdAronPair; @@ -208,11 +219,13 @@ namespace armarx::skills::gui createdAronPair->addElement(convVisitor.createdAron); } } + ARMARX_INFO << "Exit Pair Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::TuplePtr& i) { + ARMARX_INFO << "Enter Tuple Converter"; ARMARX_TRACE; auto createdAronList = std::make_shared<aron::data::List>(i->getPath()); createdAron = createdAronList; @@ -240,6 +253,7 @@ namespace armarx::skills::gui createdAronList->addElement(v.createdAron); } } + ARMARX_INFO << "Exit Tuple Converter"; } void @@ -252,6 +266,7 @@ namespace armarx::skills::gui void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::MatrixPtr& i) { + ARMARX_INFO << "Enter Matrix Converter"; ARMARX_TRACE; auto createdMatrix = std::make_shared<aron::data::NDArray>(i->getPath()); int dataSize = 0; @@ -276,6 +291,8 @@ namespace armarx::skills::gui break; }; + ARMARX_INFO << "Matrix: 1"; + // UGLY HACK: FIX ME!!! switch (i->getElementType()) { @@ -308,6 +325,8 @@ namespace armarx::skills::gui break; }; + ARMARX_INFO << "Matrix: 2"; + createdMatrix->setShape({i->getRows(), i->getCols(), dataSize}); int totalByteSize = i->getRows() * i->getCols() * dataSize; createdAron = createdMatrix; @@ -323,17 +342,23 @@ namespace armarx::skills::gui } } + ARMARX_INFO << "Matrix: 3"; 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; } + + ARMARX_INFO << "Matrix: 4"; + // write to aron data std::vector<unsigned char> elems; elems.reserve(totalByteSize); @@ -349,11 +374,13 @@ namespace armarx::skills::gui } } createdMatrix->setData(totalByteSize, elems.data()); + ARMARX_INFO << "Exit Matrix Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::QuaternionPtr& i) { + ARMARX_INFO << "Enter Quat Converter"; ARMARX_TRACE; auto createdQuat = std::make_shared<aron::data::NDArray>(i->getPath()); createdAron = createdQuat; @@ -390,6 +417,7 @@ namespace armarx::skills::gui << "serialized quaternions did not return byte sequence of correct length!"; } createdQuat->setData(serialized.size(), serialized.data()); + ARMARX_INFO << "Exit Quat Converter"; } void @@ -409,6 +437,7 @@ namespace armarx::skills::gui void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::IntEnumPtr& i) { + ARMARX_INFO << "Enter IntEnum Converter"; ARMARX_TRACE; QTreeWidgetItem* el = parentItem->child(index); @@ -433,11 +462,13 @@ namespace armarx::skills::gui std::tie(success, createdAron) = intEnumWidget->parseToAron(); handleErrors(!success); + ARMARX_INFO << "Exit IntEnum Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::IntPtr& i) { + ARMARX_INFO << "Enter Int Converter"; ARMARX_TRACE; auto createdAronInt = std::make_shared<aron::data::Int>(i->getPath()); createdAron = createdAronInt; @@ -472,11 +503,13 @@ namespace armarx::skills::gui return; } handleErrors(false); + ARMARX_INFO << "Exit Int Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::LongPtr& i) { + ARMARX_INFO << "Enter Long Converter"; ARMARX_TRACE; auto createdAronLong = std::make_shared<aron::data::Long>(i->getPath()); createdAron = createdAronLong; @@ -510,11 +543,13 @@ namespace armarx::skills::gui return; } handleErrors(false); + ARMARX_INFO << "Exit Long Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::FloatPtr& i) { + ARMARX_INFO << "Enter Float Converter"; ARMARX_TRACE; auto createdAronFloat = std::make_shared<aron::data::Float>(i->getPath()); createdAron = createdAronFloat; @@ -547,11 +582,13 @@ namespace armarx::skills::gui return; } handleErrors(false); + ARMARX_INFO << "Exit Float Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::DoublePtr& i) { + ARMARX_INFO << "Enter Double Converter"; ARMARX_TRACE; auto createdAronDouble = std::make_shared<aron::data::Double>(i->getPath()); createdAron = createdAronDouble; @@ -584,11 +621,13 @@ namespace armarx::skills::gui return; } handleErrors(false); + ARMARX_INFO << "Exit Double Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::BoolPtr& i) { + ARMARX_INFO << "Enter Bool Converter"; ARMARX_TRACE; auto createdAronBool = std::make_shared<aron::data::Bool>(i->getPath()); createdAron = createdAronBool; @@ -621,16 +660,28 @@ namespace armarx::skills::gui return; } handleErrors(false); + ARMARX_INFO << "Exit Bool Converter"; } void AronTreeWidgetConverterVisitor::visitAronVariant(const aron::type::StringPtr& i) { + ARMARX_INFO << "Enter String Converter"; ARMARX_TRACE; auto createdAronString = std::make_shared<aron::data::String>(i->getPath()); createdAron = createdAronString; QTreeWidgetItem* el = parentItem->child(index); + if (el == nullptr) + { + return; + } + + ARMARX_INFO << "el = " << el; + ARMARX_INFO << "index = " << index; + + ARMARX_INFO << "String: 1"; + if (i->getMaybe() != armarx::aron::type::Maybe::NONE) { // its a maybetype. We have to check the state @@ -641,8 +692,12 @@ namespace armarx::skills::gui } } + ARMARX_INFO << "String: 2"; + std::string str = el->text(1).toStdString(); + ARMARX_INFO << "createdAronString = " << createdAronString; createdAronString->setValue(str); + ARMARX_INFO << "Exit String Converter"; } void diff --git a/source/RobotAPI/libraries/skills_gui/aron_tree_widget/visitors/AronTreeWidgetSetter.cpp b/source/RobotAPI/libraries/skills_gui/aron_tree_widget/visitors/AronTreeWidgetSetter.cpp index 4951555344ee891df2919466a43453cfbfb6d278..26378f0ca9e24e3285233706aed7256a7d3ff390 100644 --- a/source/RobotAPI/libraries/skills_gui/aron_tree_widget/visitors/AronTreeWidgetSetter.cpp +++ b/source/RobotAPI/libraries/skills_gui/aron_tree_widget/visitors/AronTreeWidgetSetter.cpp @@ -35,11 +35,14 @@ template <typename T> std::string usString(T number, size_t precision = 3) { + ARMARX_INFO << "Enter usString"; std::stringstream ss; const char* locale = "C"; ss.imbue(std::locale(locale)); + ARMARX_INFO << "Building StringStream"; ss << std::fixed << std::setprecision(precision) << number; + ARMARX_INFO << "Exit usString"; return ss.str(); } @@ -102,6 +105,7 @@ namespace armarx::skills::gui void AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::DictPtr& i) { + ARMARX_INFO << "Enter DictPtr Setter Visitor"; // either it is the root or it has a name if (i->getPath().size() == 0 || checkTreeWidgetItemForSimilarName(i->getPath().getLastElement())) @@ -126,17 +130,24 @@ namespace armarx::skills::gui el->setCheckState(1, Qt::CheckState::Checked); } } + ARMARX_INFO << "Exit DictPtr Setter Visitor"; } void AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::ListPtr& i) { + ARMARX_INFO << "Enter ListPtr Setter Visitor"; if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement())) { + ARMARX_INFO << "Marker 0"; AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); + ARMARX_INFO << "el: " << el; auto* aronTreeWidget = AronTreeWidgetItem::DynamicCastAndCheck(el); + ARMARX_INFO << "aronTreeWidget: " << aronTreeWidget; adjustNumberOfChildren(aronTreeWidget, i->childrenSize()); + ARMARX_INFO << "Marker 1"; + unsigned int x = 0; for (const auto& value : i->getElements()) { @@ -148,6 +159,7 @@ namespace armarx::skills::gui ++x; } + ARMARX_INFO << "Marker 2"; // This displays the number of children also when the list is collapsed QString numElemsText = misc::generateNumElementsText(i->getElements().size()); aronTreeWidget->setText(1, numElemsText); @@ -161,6 +173,7 @@ namespace armarx::skills::gui el->setCheckState(1, Qt::CheckState::Checked); } } + ARMARX_INFO << "Exit ListPtr Setter Visitor"; } void @@ -168,6 +181,7 @@ namespace armarx::skills::gui const std::shared_ptr<armarx::aron::type::Matrix>& matrixType, const aron::data::NDArrayPtr& arr) { + ARMARX_INFO << "Enter Matrix Setter Visitor"; auto elemType = matrixType->getElementType(); auto* rawData = arr->getData(); // string can convert any item @@ -250,6 +264,7 @@ namespace armarx::skills::gui std::shared_ptr<armarx::aron::type::Quaternion>& quatType, const aron::data::NDArrayPtr& arr) { + ARMARX_INFO << "Enter Quat Setter Visitor"; auto elemType = quatType->getElementType(); auto rawData = arr->getData(); auto shape = arr->getShape(); @@ -280,11 +295,13 @@ namespace armarx::skills::gui { quatWidget->setText((QuaternionWidget::QuaternionComponents)i, toString(i)); } + ARMARX_INFO << "Exit Quat Setter Visitor"; } void AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::NDArrayPtr& arr) { + ARMARX_INFO << "Enter NDArray Setter Visitor"; // Matrices are handled as NDArray. Raw ndarrays cannot be created currently auto* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); ARMARX_CHECK(el); @@ -315,11 +332,13 @@ namespace armarx::skills::gui { el->setCheckState(1, Qt::CheckState::Checked); } + ARMARX_INFO << "Exit NDArray Setter Visitor"; } void AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::IntPtr& i) { + ARMARX_INFO << "Enter IntPtr Setter Visitor"; if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement())) { AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); @@ -341,11 +360,13 @@ namespace armarx::skills::gui el->setCheckState(1, Qt::CheckState::Checked); } } + ARMARX_INFO << "Exit IntPtr Setter Visitor"; } void AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::LongPtr& i) { + ARMARX_INFO << "Enter LongPtr Setter Visitor"; if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement())) { AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); @@ -356,26 +377,40 @@ namespace armarx::skills::gui el->setCheckState(1, Qt::CheckState::Checked); } } + ARMARX_INFO << "Exit LongPtr Setter Visitor"; } void AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::FloatPtr& i) { + ARMARX_INFO << "Enter FloatPtr Setter Visitor"; + ARMARX_INFO << "path: " << i->getPath().toString(); + ARMARX_INFO << "value: " << i->getValue(); + ARMARX_INFO << "test: " << usString<float>(i->getValue()); + if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement())) { AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); - el->setText(1, QString::fromStdString(usString<float>(i->getValue()))); - + ARMARX_INFO << "el = " << el; + std::string repr = usString<float>(i->getValue()); + ARMARX_INFO << "repr = " << repr; + QString qstr = QString::fromStdString(repr); + ARMARX_INFO << "qstr = " << qstr; + el->setText(1, qstr); + ARMARX_INFO << "After SetText"; if (el->aronType && el->aronType->getMaybe() != armarx::aron::type::Maybe::NONE) { + ARMARX_INFO << "What?"; el->setCheckState(1, Qt::CheckState::Checked); } } + ARMARX_INFO << "Exit FloatPtr Setter Visitor"; } void AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::DoublePtr& i) { + ARMARX_INFO << "Enter DoublePtr Setter Visitor"; if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement())) { AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); @@ -386,11 +421,13 @@ namespace armarx::skills::gui el->setCheckState(1, Qt::CheckState::Checked); } } + ARMARX_INFO << "Exit DoublePtr Setter Visitor"; } void AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::BoolPtr& i) { + ARMARX_INFO << "Enter BoolPtr Setter Visitor"; if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement())) { AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); @@ -401,11 +438,13 @@ namespace armarx::skills::gui el->setCheckState(1, Qt::CheckState::Checked); } } + ARMARX_INFO << "Exit BoolPtr Setter Visitor"; } void AronTreeWidgetSetterVisitor::visitAronVariant(const aron::data::StringPtr& i) { + ARMARX_INFO << "Enter StringPtr Setter Visitor"; if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement())) { AronTreeWidgetItem* el = AronTreeWidgetItem::DynamicCast(parentItem->child(index)); @@ -416,6 +455,7 @@ namespace armarx::skills::gui el->setCheckState(1, Qt::CheckState::Checked); } } + ARMARX_INFO << "Exit StringPtr Setter Visitor"; } void