From 929c758614811b63688ab82e8996501f9c8bfd30 Mon Sep 17 00:00:00 2001
From: Peter Albrecht <usnlf@student.kit.edu>
Date: Wed, 25 Dec 2024 13:45:17 +0100
Subject: [PATCH] feat: skill id copy

---
 .../skills_gui/skill_details/ProfileMenuWidget.cpp    |  6 ++++--
 .../skills_gui/skill_details/ProfileMenuWidget.h      |  2 ++
 .../skills_gui/skill_details/SkillDetailsGroupBox.cpp |  4 ++++
 .../skill_details/SkillDetailsTreeWidget.cpp          | 11 +++++++++++
 .../skills_gui/skill_details/SkillDetailsTreeWidget.h |  1 +
 5 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.cpp
index ac56b71de..73a69456d 100644
--- a/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.cpp
+++ b/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.cpp
@@ -20,6 +20,7 @@ namespace armarx::skills::gui
     {
         setArgsFromClipboard = new QPushButton();
         copyArgsToClipboard = new QPushButton();
+        copySkillIdToClipboard = new QPushButton();
         resetArgsToProfile = new QPushButton();
         profileSelector = new QComboBox();
 
@@ -32,8 +33,7 @@ namespace armarx::skills::gui
 
         topLayout->addWidget(setArgsFromClipboard);
         topLayout->addWidget(copyArgsToClipboard);
-        // this is not good. We should probably use a QSpacerItem here...
-        topLayout->addWidget(new QLabel());
+        topLayout->addWidget(copySkillIdToClipboard);
         topLayout->addWidget(resetArgsToProfile);
 
         this->setLayout(mainLayout);
@@ -42,6 +42,8 @@ namespace armarx::skills::gui
         setArgsFromClipboard->setText(QString::fromStdString(SET_ARGS_BUTTON_TEXT));
         copyArgsToClipboard->setText(QString::fromStdString(COPY_ARGS_BUTTON_TEXT));
         copyArgsToClipboard->setIcon(getIcon("edit-copy-4.svg"));
+        copySkillIdToClipboard->setText(QString::fromStdString(COPY_SKILL_BUTTON_TEXT));
+        copySkillIdToClipboard->setIcon(getIcon("edit-copy-4.svg"));
         resetArgsToProfile->setText(QString::fromStdString(RESET_ARGS_BUTTON_TEXT));
         resetArgsToProfile->setIcon(getIcon("refresh-black.svg"));
         profileSelector->addItem(QString::fromStdString(DEFAULT_PROFILE_TEXT));
diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.h b/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.h
index 3046b18b8..ad6feab68 100644
--- a/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.h
+++ b/source/RobotAPI/libraries/skills_gui/skill_details/ProfileMenuWidget.h
@@ -15,6 +15,7 @@ namespace armarx::skills::gui
     public:
         static const constexpr char* SET_ARGS_BUTTON_TEXT = "Set Args from Clipboard";
         static const constexpr char* COPY_ARGS_BUTTON_TEXT = " Copy Args to Clipboard";
+        static const constexpr char* COPY_SKILL_BUTTON_TEXT = " Copy SkillID to Clipboard";
         static const constexpr char* RESET_ARGS_BUTTON_TEXT = " Reset Args to Profile";
         static const constexpr char* DEFAULT_PROFILE_TEXT = "<No Profile selected. Using root>";
         static const constexpr char* PROFILE_NOT_IMPLEMENTED =
@@ -23,6 +24,7 @@ namespace armarx::skills::gui
         // contents are public, as this class is just a convenience wrapper
         QPushButton* setArgsFromClipboard = nullptr;
         QPushButton* copyArgsToClipboard = nullptr;
+        QPushButton* copySkillIdToClipboard = nullptr;
         QPushButton* resetArgsToProfile = nullptr;
         QComboBox* profileSelector = nullptr;
 
diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp
index c83a0f9b4..07fc42bdf 100644
--- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp
+++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp
@@ -147,6 +147,10 @@ namespace armarx::skills::gui
                 &QPushButton::clicked,
                 skillDetailsTreeWidget,
                 &SkillDetailsTreeWidget::copyCurrentConfig);
+        connect(profileMenuWidget->copySkillIdToClipboard,
+                &QPushButton::clicked,
+                skillDetailsTreeWidget,
+                &SkillDetailsTreeWidget::copyCurrentSkillID);
         connect(profileMenuWidget->setArgsFromClipboard,
                 &QPushButton::clicked,
                 skillDetailsTreeWidget,
diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp
index bff75ae4f..7d507847c 100644
--- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp
+++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp
@@ -228,6 +228,17 @@ namespace armarx::skills::gui
         QClipboard* clipboard = QApplication::clipboard();
         clipboard->setText(QString::fromStdString(json.dump(2)));
     }
+    
+    void SkillDetailsTreeWidget::copyCurrentSkillID() 
+    {
+        if (not shownSkill.has_value())
+        {
+            return;
+        }
+
+        QClipboard* clipboard = QApplication::clipboard();
+        clipboard->setText(QString::fromStdString(shownSkill->skillId.toString()));
+    }
 
     void
     SkillDetailsTreeWidget::pasteCurrentConfig()
diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h
index cf954dceb..2cf18976a 100644
--- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h
+++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h
@@ -30,6 +30,7 @@ namespace armarx::skills::gui
         // this will reset the args to the profile defaults
         void resetCurrentConfig();
         void copyCurrentConfig();
+        void copyCurrentSkillID();
         void disconnectGui();
         void updateGui(SkillManagerWrapper::Snapshot update);
         void resizeContents();
-- 
GitLab