diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp index 237498dcac4f964ee2de295f88b013a0907b5fb5..f32e98a2dff424dc5bf9dc63abf3ecdf6e20a19c 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp @@ -69,7 +69,7 @@ namespace armarx { dialog = new SimpleConfigDialog(parent); dialog->addProxyFinder<skills::manager::dti::SkillManagerInterfacePrx>( - "SkillMemory", "", "SkillMan*"); + "SkillMemory", "", "SkillMem*"); } return qobject_cast<SimpleConfigDialog*>(dialog); } @@ -96,6 +96,7 @@ namespace armarx // Others namespace armarx { + /* void SkillManagerMonitorWidgetController::prepareAndRunMenu(const QPoint& pos) { @@ -149,11 +150,12 @@ namespace armarx } return nullptr; } +*/ SkillManagerMonitorWidgetController::SkillManagerMonitorWidgetController() { - widget.setupUi(new QWidget()); + widget.setupUi(getWidget()); // setup memory this->mem_wrapper = std::make_shared<skills::gui::SkillManagerWrapper>(); @@ -163,10 +165,10 @@ namespace armarx widget.groupBoxSkillExecutions->layout(), widget.groupBoxSkills, - widget.splitter_2, + widget.splitter, widget.groupBoxSkillDetails, - widget.splitter_2, + widget.splitter, widget.updateWidgetLayout, @@ -175,6 +177,7 @@ namespace armarx this->mem_wrapper); + /* this->updateWidget = new PeriodicUpdateWidget(2.0, 60); widget.updateWidgetLayout->insertWidget(0, updateWidget); @@ -189,6 +192,7 @@ namespace armarx widget.skillDescription = skillDescriptionWidget; + connect(this->stopAllButton, &QPushButton::clicked, this, @@ -272,12 +276,13 @@ namespace armarx widget.treeWidgetSkillDetails->setEditTriggers( QAbstractItemView::EditTrigger::NoEditTriggers); widget.treeWidgetSkillDetails->setColumnHidden(3, true); +*/ - this->updateWidget->startTimerIfEnabled(); - */ + //this->updateWidget->startTimerIfEnabled(); + getProxy(this->memory, observerName, 1000); - this->mem_wrapper->connect(memory); + //this->mem_wrapper->connect(memory); connected = true; } @@ -289,15 +294,18 @@ namespace armarx this->mem_wrapper->disconnect(); // reset all + /* skills.clear(); widget.treeWidgetSkills->clear(); widget.treeWidgetSkillDetails->clear(); skillsArgumentsTreeWidgetItem = nullptr; selectedSkill.skillId.providerId->providerName = ""; selectedSkill.skillId.skillName = ""; - this->updateWidget->stopTimer(); + //this->updateWidget->stopTimer(); +*/ } + /* void SkillManagerMonitorWidgetController::searchSkills() { @@ -315,7 +323,7 @@ namespace armarx SkillManagerMonitorWidgetController::matchSkillUpdateToSearch( std::map<skills::manager::dto::SkillID, skills::manager::dto::SkillDescription>& update) { - /* + if (this->currentSkillSearch.isEmpty()) { return; @@ -339,7 +347,7 @@ namespace armarx ++it; } } -*/ + } void @@ -351,7 +359,7 @@ namespace armarx return; } - /* CHECK OWN SKILLS LIST */ + // remove non-existing ones try { @@ -576,6 +584,7 @@ namespace armarx executeSelectedSkill(); } + void SkillManagerMonitorWidgetController::executeSkillWithParams(skills::SkillID skillId, aron::data::DictPtr params) @@ -678,7 +687,6 @@ namespace armarx { std::scoped_lock l(updateMutex); - /* if (selectedSkill.skillExecutionId.skillId.fullySpecified()) { ARMARX_INFO << "The user requested to stop a skill, which was not fully specified!"; @@ -690,7 +698,6 @@ namespace armarx { return; } -*/ ARMARX_INFO << "Stopping skill from GUI: " << selectedSkill.skillExecutionId.toString(); @@ -859,5 +866,6 @@ namespace armarx { // TODO } +*/ } // namespace armarx diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h index 68779cc37ab84805fd009fddb96a59c1b261d80c..d5d3d2e5560a9d7b884f77377515fcf089d5f657 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h @@ -125,9 +125,10 @@ namespace armarx void onDisconnectComponent(); signals: - void disconnect(); + //void disconnect(); private slots: + /* void skillSelectionChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous); void skillExecutionSelectionChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous); @@ -147,6 +148,7 @@ namespace armarx void rerunSkillWithSimilarParams(); void searchSkills(); +*/ private: @@ -194,9 +196,11 @@ namespace armarx selectedSkill; + /* void executeSkillWithParams(skills::SkillID skillId, aron::data::DictPtr params); void matchSkillUpdateToSearch(std::map<skills::manager::dto::SkillID, skills::manager::dto::SkillDescription>& update); +*/ void connectGui(); diff --git a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp index 822787125ef61abd59ff96a68017f2c58abbdd1e..b9f841f70cd378dbb09bf91a4c8beb131da55c56 100644 --- a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp +++ b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp @@ -29,6 +29,9 @@ namespace armarx::skills::gui ARMARX_CHECK(_skillGroupBox); ARMARX_CHECK(_skillDetailGroupBox); ARMARX_CHECK(_updateWidgetLayout); + ARMARX_CHECK(skillDescription); + ARMARX_CHECK(skillDescriptionParentLayout); + ARMARX_CHECK(_memory); // setup memory this->memory = _memory; @@ -38,25 +41,28 @@ namespace armarx::skills::gui this->updateWidget = new PeriodicUpdateWidget(); this->updateWidgetLayout->insertWidget(0, updateWidget); + // replace skillExecutionTreeWidget this->skillExecutionTreeWidget = new SkillExecutionTreeWidget(memory); armarx::gui::replaceWidget(_skillExecutionTreeWidget, this->skillExecutionTreeWidget, - _skillDetailGroupBoxParentLayout); + _skillExecutionTreeWidgetParentLayout); // replace skillGroupBox this->skillGroupBox = new SkillGroupBox(memory); - armarx::gui::replaceWidget(_skillGroupBox, this->skillGroupBox, _skillGroupBoxParentLayout); // replace skillDetailGroupBox this->skillDetailGroupBox = new SkillDetailGroupBox(memory); - armarx::gui::replaceWidget( - _skillDetailGroupBox, this->skillDetailGroupBox, _skillDetailGroupBoxParentLayout); + + armarx::gui::clearSplitter(_skillGroupBoxParentLayout); + _skillGroupBoxParentLayout->insertWidget(0, this->skillDetailGroupBox); + _skillGroupBoxParentLayout->insertWidget(0, this->skillGroupBox); // aron skillDescriptionWidget = new SkillDescriptionWidget(); - armarx::gui::replaceWidget( - skillDescription, this->skillDescriptionWidget, skillDescriptionParentLayout); + this->skillDetailGroupBox->addDescriptionWidget(skillDescriptionWidget); + + setupUi(); } void @@ -65,13 +71,21 @@ namespace armarx::skills::gui ARMARX_ERROR << "Not implemented"; } + void + SkillMemoryGUI::setupUi() + { + connectSignals(); + } + void SkillMemoryGUI::connectSignals() { + /* // connect update widget to memory update connect(this->updateWidget, &PeriodicUpdateWidget::update, this->memory.get(), &SkillManagerWrapper::fetchUpdates); +*/ } } // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h index 90d81b1cb15982fd7533fdb0a3450ab6ff6faa22..07ec971daaaa2eb94de2dff82f2cf434f1d1e5aa 100644 --- a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h +++ b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h @@ -43,6 +43,7 @@ namespace armarx::skills::gui void resetGui(); private: + void setupUi(); void connectSignals(); SkillExecutionTreeWidget* skillExecutionTreeWidget = nullptr; diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp index 78833d793214ec7a5c69089424d64530e777426d..53cf0c86805ab7fa3a38798fc22137b9c44a776d 100644 --- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp +++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp @@ -71,6 +71,12 @@ namespace armarx::skills::gui this->memory->startExecutionWithParams(currentExecutionId.skillId, params); } + void + SkillExecutionTreeWidget::setupUi() + { + this->setColumnCount(4); + } + inline bool SkillExecutionTreeWidget::selectionValid() { diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h index 496b2e1838f07db5f9ed6f32ac7d161174601fbf..3d6fd7f2d772ee2eea3f7ff1658b3bd0563e560e 100644 --- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h +++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h @@ -29,6 +29,7 @@ namespace armarx::skills::gui QWidget* parent = nullptr) : QTreeWidget(parent), MemoryCommunicatorBase(_memory) { + setupUi(); } struct SelectedExecution diff --git a/source/RobotAPI/libraries/skills_gui/gui_utils.cpp b/source/RobotAPI/libraries/skills_gui/gui_utils.cpp index 337ebc87d7506f9b4688e3ae3eabed5f4c63d389..666228c764379671d6ca59d142fefc02446c42d6 100644 --- a/source/RobotAPI/libraries/skills_gui/gui_utils.cpp +++ b/source/RobotAPI/libraries/skills_gui/gui_utils.cpp @@ -3,13 +3,13 @@ #include <QLayout> #include <QLayoutItem> #include <QSplitter> -#include <QWidget> #include <QTreeWidgetItem> +#include <QWidget> #include <ArmarXCore/core/exceptions/local/ExpressionException.h> - -void armarx::gui::clearLayout(QLayout* layout) +void +armarx::gui::clearLayout(QLayout* layout) { // Source: https://stackoverflow.com/a/4857631 @@ -31,7 +31,8 @@ void armarx::gui::clearLayout(QLayout* layout) } } -void armarx::gui::clearItem(QTreeWidgetItem* item) +void +armarx::gui::clearItem(QTreeWidgetItem* item) { while (item->childCount() > 0) { @@ -39,8 +40,8 @@ void armarx::gui::clearItem(QTreeWidgetItem* item) } } - -QSplitter* armarx::gui::useSplitter(QLayout* layout) +QSplitter* +armarx::gui::useSplitter(QLayout* layout) { ARMARX_CHECK(layout); @@ -48,7 +49,7 @@ QSplitter* armarx::gui::useSplitter(QLayout* layout) for (int i = 0; i < layout->count(); ++i) { ARMARX_CHECK_NOT_NULL(layout->itemAt(i)->widget()) - << "QSplitter only supports widgets, but layout item #" << i << " is not a widget."; + << "QSplitter only supports widgets, but layout item #" << i << " is not a widget."; } QSplitter* splitter; @@ -97,3 +98,12 @@ armarx::gui::LeadingZeroSpinBox::textFromValue(int value) const { return QString("%1").arg(value, numDigits, base, QChar('0')); } + +void +armarx::gui::clearSplitter(QSplitter* splitter) +{ + for (int i = 0; i < splitter->count(); ++i) + { + splitter->widget(i)->deleteLater(); + } +} diff --git a/source/RobotAPI/libraries/skills_gui/gui_utils.h b/source/RobotAPI/libraries/skills_gui/gui_utils.h index ea985c405bf075cbad0ec7f81472f5539f6c1b99..80855718d50d1c479bd516638702998fed86698b 100644 --- a/source/RobotAPI/libraries/skills_gui/gui_utils.h +++ b/source/RobotAPI/libraries/skills_gui/gui_utils.h @@ -1,15 +1,15 @@ #pragma once +#include <iostream> + #include <QLayout> #include <QLayoutItem> #include <QSpinBox> +#include <QSplitter> +#include <QTreeWidgetItem> #include <QWidget> -#include "qsplitter.h" - -class QLayout; -class QSplitter; -class QTreeWidgetItem; +#include <ArmarXCore/core/exceptions/local/ExpressionException.h> namespace armarx::gui { @@ -22,6 +22,8 @@ namespace armarx::gui */ void clearLayout(QLayout* layout); + void clearSplitter(QSplitter* splitter); + /** * @brief Clear a tree widget item * @@ -35,6 +37,9 @@ namespace armarx::gui void replaceWidget(WidgetT*& old, QWidget* neu, QLayout* parentLayout) { + ARMARX_CHECK(old); + ARMARX_CHECK(neu); + ARMARX_CHECK(parentLayout); QLayoutItem* oldItem = parentLayout->replaceWidget(old, neu); if (oldItem) { @@ -46,14 +51,19 @@ namespace armarx::gui template <class WidgetT> void - replaceWidget(WidgetT*& old, QWidget* neu, QSplitter* parentLayout) + replaceWidget(WidgetT*& old, QWidget* neu, QSplitter*& parentLayout) { + ARMARX_CHECK(old); + ARMARX_CHECK(neu); + ARMARX_CHECK(parentLayout); int index = parentLayout->indexOf(old); + ARMARX_CHECK(index >= 0) << "Could not find widget in splitter"; QWidget* oldItem = parentLayout->replaceWidget(index, neu); if (oldItem) { - delete oldItem; - delete old; + // deleting the widget(s) directly will segfault for some reason + oldItem->deleteLater(); + old->deleteLater(); old = nullptr; } } diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.cpp index 93c0398d84e436e8c16f352d599962f1c4b4f263..a440ef341294ec2a8fdcebbb8c4fd95ac08e4768 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.cpp +++ b/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.cpp @@ -1 +1,23 @@ #include "ProfileMenuWidget.h" + +namespace armarx::skills::gui +{ + + void + ProfileMenuWidget::setupUi() + { + setArgsFromClipboard = new QPushButton(); + copyArgsToClioboard = new QPushButton(); + resetArgsToProfile = new QPushButton(); + profileSelector = new QComboBox(); + + // Text + setArgsFromClipboard->setText(QString::fromStdString("Set args from clipboard")); + copyArgsToClioboard->setText(QString::fromStdString("Copy args to clipboard")); + resetArgsToProfile->setText(QString::fromStdString("Reset args to profile")); + profileSelector->setCurrentText( + QString::fromStdString("<No Profile selected. Using root>")); + } + + +} // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.h b/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.h index 57e56e6e583e21738114e226d7e5c4f356954c7f..bfd5ecc1748f79eb03932bada6b1e4e9b7865217 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.h +++ b/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.h @@ -16,6 +16,7 @@ namespace armarx::skills::gui ProfileMenuWidget(std::shared_ptr<SkillManagerWrapper> _memory, QWidget* parent = nullptr) : QWidget(parent), MemoryCommunicatorBase(_memory) { + setupUi(); } private: diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp index c7490720618e166aca588c847029b77eae64f4f9..9ab21f2f86e9849ae986ce79491689afe5cc89dd 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp @@ -4,14 +4,20 @@ namespace armarx::skills::gui { + void + SkillDetailGroupBox::addDescriptionWidget(SkillDescriptionWidget* widget) + { + this->layout->insertWidget(1, widget); + } + void SkillDetailGroupBox::setupUi() { // construct all sub widgets - this->executeSkillButton = new QPushButton(this); + this->executeSkillButton = new QPushButton(); this->profileMenuWidget = new ProfileMenuWidget(this->memory, this); this->skillDetailsTreeWidget = new SkillDetailsTreeWidget(this->memory, this); - QVBoxLayout* layout = new QVBoxLayout(); + layout = new QVBoxLayout(); // Layouting this->setLayout(layout); @@ -23,5 +29,6 @@ namespace armarx::skills::gui // Text this->executeSkillButton->setText( QString::fromStdString(SkillDetailGroupBox::EXECUTE_SKILL_BUTTON_TEXT)); + this->show(); } } // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.h b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.h index 4f6ecbcab7b1effe5d42ede45bb5951f04bb3a65..6dc1767bfda3cdf6ec73ee5c821060fb6fe8b0c7 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.h +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.h @@ -3,6 +3,9 @@ #include <QGroupBox> #include <QPushButton> +#include <QVBoxLayout> + +#include "RobotAPI/libraries/skills_gui/aron_tree_widget/widgets/SkillDescriptionWidget.h" #include "../memory/MemoryCommunicatorBase.h" #include "ProfileMenuWidget.h" @@ -19,10 +22,14 @@ namespace armarx::skills::gui QWidget* parent = nullptr) : QGroupBox(parent), MemoryCommunicatorBase(_memory) { + setupUi(); } + void addDescriptionWidget(SkillDescriptionWidget* widget); + private: void setupUi(); + QVBoxLayout* layout = nullptr; QPushButton* executeSkillButton = nullptr; SkillDetailsTreeWidget* skillDetailsTreeWidget = nullptr; ProfileMenuWidget* profileMenuWidget = nullptr; diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp index f2166afe6e6a568fdbfb1f8f28f221d39964bc80..7ec70a4636f1bdcb765a59c972fb9a1eb8153b98 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp @@ -1,2 +1,12 @@ #include "SkillDetailsTreeWidget.h" +namespace armarx::skills::gui +{ + + void + SkillDetailsTreeWidget::setupUi() + { + } + + +} // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h index 013d6cbe2f055805e50fe914c0e91e4099d4facf..28436984c3730c0e52966eafd55a747c52c8c28a 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h @@ -14,6 +14,7 @@ namespace armarx::skills::gui QWidget* parent = nullptr) : QTreeWidget(parent), MemoryCommunicatorBase(_memory) { + setupUi(); } private: diff --git a/source/RobotAPI/libraries/skills_gui/skills/SkillGroupBox.cpp b/source/RobotAPI/libraries/skills_gui/skills/SkillGroupBox.cpp index 97a2015477d155199ab26dadf880ac932db5ba62..c53d3ed28f14da26b35963673a4d89aa8126f124 100644 --- a/source/RobotAPI/libraries/skills_gui/skills/SkillGroupBox.cpp +++ b/source/RobotAPI/libraries/skills_gui/skills/SkillGroupBox.cpp @@ -16,8 +16,8 @@ namespace armarx::skills::gui SkillGroupBox::setupUi() { // construct widgets - this->searchBar = new QLineEdit(this); - this->acceptSearchButton = new QPushButton(this); + this->searchBar = new QLineEdit(); + this->acceptSearchButton = new QPushButton(); this->skillTreeWidget = new SkillTreeWidget(memory, this); // layouting @@ -40,6 +40,7 @@ namespace armarx::skills::gui void SkillGroupBox::connectSignals() { + /* connect( this->acceptSearchButton, &QPushButton::clicked, this, &SkillGroupBox::handleSearch); connect(this->searchBar, &QLineEdit::editingFinished, this, &SkillGroupBox::handleSearch); @@ -47,5 +48,6 @@ namespace armarx::skills::gui &SkillGroupBox::searchRequest, this->memory.get(), &SkillManagerWrapper::acceptSearchRequest); +*/ } } // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/skills/SkillGroupBox.h b/source/RobotAPI/libraries/skills_gui/skills/SkillGroupBox.h index 60bd45e3b48c7a9bb8af386f1d7149fcd3d77372..3fd83e8833775db41b77845cadce0d0fc673075a 100644 --- a/source/RobotAPI/libraries/skills_gui/skills/SkillGroupBox.h +++ b/source/RobotAPI/libraries/skills_gui/skills/SkillGroupBox.h @@ -34,7 +34,7 @@ namespace armarx::skills::gui private: void setupUi(); void connectSignals(); - QLineEdit* searchBar; + QLineEdit* searchBar = nullptr; QPushButton* acceptSearchButton = nullptr; SkillTreeWidget* skillTreeWidget = nullptr; };