Skip to content
Snippets Groups Projects
SkillDetailsGroupBox.cpp 5.67 KiB
Newer Older
#include "SkillDetailsGroupBox.h"
#include <qpushbutton.h>
#include "RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.h"
#include "RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h"
Peter Albrecht's avatar
Peter Albrecht committed

namespace armarx::skills::gui
{
    void
    SkillDetailGroupBox::updateSkillDetails(SkillID& _skillId)
    {
        if (_skillId.skillName == SkillID::UNKNOWN)
            return;

        auto const& skills = memory->getSkills();

        std::optional<skills::ProviderID> provider_opt;
        // check skillId
        if (_skillId.isProviderSpecified())
        {
            provider_opt = _skillId.providerId;
        }
        else
        {
            // find first provider to provide the skill
            provider_opt = SkillManagerWrapper::findFirstProvider(skills, _skillId);
        }

        if (provider_opt == std::nullopt)
        {
            // skill was not found in snapshot. Abort...
            return;
        }

        // construct skill id (with guaranteed valid provider)
        skills::SkillID skillId = {provider_opt, _skillId.skillName};


        // Maybe the search doesn't include the shown skill?
        if (skills.count(skillId.providerId.value()) == 0 ||
            skills.at(skillId.providerId.value()).count(skillId) == 0)
        {
            // reset details widget
            skillDetailsTreeWidget->resetWidget();
            return;
        }

        skills::SkillDescription descr = skills.at(skillId.providerId.value()).at(skillId);

        // ------------ update widgets ------------

        setDisabled(true);

        // setup groupBox
        this->setTitle(QString::fromStdString(skillId.toString()));
        setDisabled(false);
        skillDetailsTreeWidget->updateContents(skillId, descr);
        // description widget
        skillDescriptionWidget->setSkillDescription(descr);


        // add new profiles for this skill
        // TODO: Where stored?
    }

    SkillDetailGroupBox::connectGui(std::string observerName)
        skillDetailsTreeWidget->setEditTriggers(QAbstractItemView::EditTrigger::NoEditTriggers);
    SkillDetailGroupBox::handleExecutionRequest()
        auto data = skillDetailsTreeWidget->getConfigAsAron();
        auto skillId = skillDetailsTreeWidget->getShownId();
        if (skillId.has_value())
        {
            memory->startExecutionWithParams(skillId.value(), data);
        }
    void
    SkillDetailGroupBox::resizeEvent(QResizeEvent* event)
    {
        QGroupBox::resizeEvent(event);
        skillDetailsTreeWidget->resizeContents();
    }

Peter Albrecht's avatar
Peter Albrecht committed
    void
    SkillDetailGroupBox::setupUi()
    {
        this->setTitle(QString::fromStdString(GROUP_BOX_TITLE));

        this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);

Peter Albrecht's avatar
Peter Albrecht committed
        // construct all sub widgets
        this->executeSkillButton = new QPushButton();
Peter Albrecht's avatar
Peter Albrecht committed
        this->profileMenuWidget = new ProfileMenuWidget(this->memory, this);
        this->skillDetailsTreeWidget = new SkillDetailsTreeWidget(this->memory, this);
        this->skillDescriptionWidget = new SkillDescriptionWidget(this);
        this->layout = new QVBoxLayout();
        this->splitter = new QSplitter();
        splitter->setOrientation(Qt::Orientation::Vertical);
Peter Albrecht's avatar
Peter Albrecht committed

        // Layouting
        this->setLayout(layout);

        layout->addWidget(this->profileMenuWidget);
        layout->addWidget(splitter);
        splitter->addWidget(this->skillDescriptionWidget);
        splitter->addWidget(this->skillDetailsTreeWidget);
Peter Albrecht's avatar
Peter Albrecht committed
        layout->addWidget(this->executeSkillButton);

        // Text
        this->executeSkillButton->setText(
            QString::fromStdString(SkillDetailGroupBox::EXECUTE_SKILL_BUTTON_TEXT));
Peter Albrecht's avatar
Peter Albrecht committed
        {
            QPixmap pix(QString::fromStdString(":icons/run.svg"));
            QIcon icon(pix);
            this->executeSkillButton->setIcon(icon);
        }

        connectSignals();

    void
    SkillDetailGroupBox::connectSignals()
    {
        connect(executeSkillButton,
                &QPushButton::clicked,
                this,
                &SkillDetailGroupBox::handleExecutionRequest);
        connect(this,
                &SkillDetailGroupBox::disconnectGui,
                skillDetailsTreeWidget,
                &SkillDetailsTreeWidget::disconnectGui);
        connect(this,
                &SkillDetailGroupBox::updateGui,
                skillDetailsTreeWidget,
                &SkillDetailsTreeWidget::updateGui);
        // profile buttons
        connect(profileMenuWidget->copyArgsToClipboard,
                &QPushButton::clicked,
                skillDetailsTreeWidget,
                &SkillDetailsTreeWidget::copyCurrentConfig);
Peter Albrecht's avatar
Peter Albrecht committed
        connect(profileMenuWidget->copySkillIdToClipboard,
                &QPushButton::clicked,
                skillDetailsTreeWidget,
                &SkillDetailsTreeWidget::copyCurrentSkillID);
        connect(profileMenuWidget->setArgsFromClipboard,
                &QPushButton::clicked,
                skillDetailsTreeWidget,
                &SkillDetailsTreeWidget::pasteCurrentConfig);
        connect(profileMenuWidget->resetArgsToProfile,
                &QPushButton::clicked,
                skillDetailsTreeWidget,
                &SkillDetailsTreeWidget::resetCurrentConfig);
        connect(profileMenuWidget->changesSelector,
                &QPushButton::pressed,
                skillDetailsTreeWidget,
                &SkillDetailsTreeWidget::reloadLastParameters);
        connect(skillDetailsTreeWidget,
                &SkillDetailsTreeWidget::updated,
                profileMenuWidget,
                &ProfileMenuWidget::updateChangesSelector);
Peter Albrecht's avatar
Peter Albrecht committed
} // namespace armarx::skills::gui