SkillDetailsGroupBox.cpp
Go to the documentation of this file.
1 #include "SkillDetailsGroupBox.h"
2 #include <qpushbutton.h>
5 
6 namespace armarx::skills::gui
7 {
8  void
10  {
11  if (_skillId.skillName == SkillID::UNKNOWN)
12  return;
13 
14  auto const& skills = memory->getSkills();
15 
16  std::optional<skills::ProviderID> provider_opt;
17  // check skillId
18  if (_skillId.isProviderSpecified())
19  {
20  provider_opt = _skillId.providerId;
21  }
22  else
23  {
24  // find first provider to provide the skill
25  provider_opt = SkillManagerWrapper::findFirstProvider(skills, _skillId);
26  }
27 
28  if (provider_opt == std::nullopt)
29  {
30  // skill was not found in snapshot. Abort...
31  return;
32  }
33 
34  // construct skill id (with guaranteed valid provider)
35  skills::SkillID skillId = {provider_opt, _skillId.skillName};
36 
37 
38  // Maybe the search doesn't include the shown skill?
39  if (skills.count(skillId.providerId.value()) == 0 ||
40  skills.at(skillId.providerId.value()).count(skillId) == 0)
41  {
42  // reset details widget
43  skillDetailsTreeWidget->resetWidget();
44  return;
45  }
46 
47 
48  // get skill description
49  skills::SkillDescription descr = skills.at(skillId.providerId.value()).at(skillId);
50 
51  // ------------ update widgets ------------
52 
53  setDisabled(true);
54 
55  // setup groupBox
56  this->setTitle(QString::fromStdString(skillId.toString()));
57  setDisabled(false);
58 
59  // setup table view
60  skillDetailsTreeWidget->updateContents(skillId, descr);
61 
62  // description widget
63  skillDescriptionWidget->setSkillDescription(descr);
64 
65 
66  // add new profiles for this skill
67  // TODO: Where stored?
68  }
69 
70  void
71  SkillDetailGroupBox::connectGui(std::string observerName)
72  {
73  skillDetailsTreeWidget->setEditTriggers(QAbstractItemView::EditTrigger::NoEditTriggers);
74  }
75 
76  void
77  SkillDetailGroupBox::handleExecutionRequest()
78  {
79  auto data = skillDetailsTreeWidget->getConfigAsAron();
80  auto skillId = skillDetailsTreeWidget->getShownId();
81  if (skillId.has_value())
82  {
83  memory->startExecutionWithParams(skillId.value(), data);
84  }
85  }
86 
87  void
88  SkillDetailGroupBox::resizeEvent(QResizeEvent* event)
89  {
90  QGroupBox::resizeEvent(event);
91  skillDetailsTreeWidget->resizeContents();
92  }
93 
94  void
95  SkillDetailGroupBox::setupUi()
96  {
97  this->setTitle(QString::fromStdString(GROUP_BOX_TITLE));
98 
99  this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
100 
101  // construct all sub widgets
102  this->executeSkillButton = new QPushButton();
103  this->profileMenuWidget = new ProfileMenuWidget(this->memory, this);
104  this->skillDetailsTreeWidget = new SkillDetailsTreeWidget(this->memory, this);
105  this->skillDescriptionWidget = new SkillDescriptionWidget(this);
106  this->layout = new QVBoxLayout();
107  this->splitter = new QSplitter();
108  splitter->setOrientation(Qt::Orientation::Vertical);
109 
110  // Layouting
111  this->setLayout(layout);
112 
113  layout->addWidget(this->profileMenuWidget);
114  layout->addWidget(splitter);
115  splitter->addWidget(this->skillDescriptionWidget);
116  splitter->addWidget(this->skillDetailsTreeWidget);
117  layout->addWidget(this->executeSkillButton);
118 
119  // Text
120  this->executeSkillButton->setText(
121  QString::fromStdString(SkillDetailGroupBox::EXECUTE_SKILL_BUTTON_TEXT));
122  {
123  QPixmap pix(QString::fromStdString(":icons/run.svg"));
124  QIcon icon(pix);
125  this->executeSkillButton->setIcon(icon);
126  }
127 
128 
129  connectSignals();
130  }
131 
132  void
133  SkillDetailGroupBox::connectSignals()
134  {
135  connect(executeSkillButton,
136  &QPushButton::clicked,
137  this,
138  &SkillDetailGroupBox::handleExecutionRequest);
139  connect(this,
141  skillDetailsTreeWidget,
143  connect(this,
145  skillDetailsTreeWidget,
147 
148  // profile buttons
149  connect(profileMenuWidget->copyArgsToClipboard,
150  &QPushButton::clicked,
151  skillDetailsTreeWidget,
153  connect(profileMenuWidget->copySkillIdToClipboard,
154  &QPushButton::clicked,
155  skillDetailsTreeWidget,
157  connect(profileMenuWidget->setArgsFromClipboard,
158  &QPushButton::clicked,
159  skillDetailsTreeWidget,
161  connect(profileMenuWidget->resetArgsToProfile,
162  &QPushButton::clicked,
163  skillDetailsTreeWidget,
165  connect(profileMenuWidget->changesSelector,
166  &QPushButton::pressed,
167  skillDetailsTreeWidget,
169  connect(skillDetailsTreeWidget,
171  profileMenuWidget,
173  connect(profileMenuWidget->historySelector,
174  &QPushButton::pressed,
175  skillDetailsTreeWidget,
177  }
178 
179 
180 } // namespace armarx::skills::gui
armarx::skills::SkillID::toString
std::string toString() const
Definition: SkillID.cpp:68
SkillDetailsTreeWidget.h
skills
This file is part of ArmarX.
armarx::skills::gui::SkillDetailsTreeWidget::resetCurrentConfig
void resetCurrentConfig()
Definition: SkillDetailsTreeWidget.cpp:338
armarx::skills::gui::SkillDetailsTreeWidget::updateGui
void updateGui(SkillManagerWrapper::Snapshot update)
Definition: SkillDetailsTreeWidget.cpp:97
armarx::skills::gui::MemoryCommunicatorBase::memory
std::shared_ptr< SkillManagerWrapper > memory
Definition: MemoryCommunicatorBase.h:23
armarx::skills::SkillID::skillName
std::string skillName
Definition: SkillID.h:41
armarx::skills::gui::SkillDetailsTreeWidget::reloadLastParameters
void reloadLastParameters()
Definition: SkillDetailsTreeWidget.cpp:223
armarx::skills::SkillDescription
Definition: SkillDescription.h:17
armarx::skills::gui::SkillDetailGroupBox::connectGui
void connectGui(std::string observerName)
Definition: SkillDetailsGroupBox.cpp:71
armarx::skills::gui::ProfileMenuWidget::updateChangesSelector
void updateChangesSelector(const skills::SkillID shownSkill)
Definition: ProfileMenuWidget.cpp:64
armarx::skills::gui::ProfileMenuWidget::setArgsFromClipboard
QPushButton * setArgsFromClipboard
Definition: ProfileMenuWidget.h:28
armarx::skills::SkillID::providerId
std::optional< ProviderID > providerId
Definition: SkillID.h:40
armarx::skills::gui::SkillDetailsTreeWidget::resizeContents
void resizeContents()
Problem: columns 0 and 1 have arbitrary size; so we want to limit their size, to make sure everything...
Definition: SkillDetailsTreeWidget.cpp:208
armarx::skills::gui::ProfileMenuWidget::copyArgsToClipboard
QPushButton * copyArgsToClipboard
Definition: ProfileMenuWidget.h:29
armarx::skills::gui::ProfileMenuWidget::historySelector
QPushButton * historySelector
Definition: ProfileMenuWidget.h:33
armarx::memory
Brief description of class memory.
Definition: memory.h:38
armarx::skills::SkillID::UNKNOWN
static const constexpr char * UNKNOWN
Definition: SkillID.h:18
armarx::skills::gui::SkillManagerWrapper::findFirstProvider
static const std::optional< skills::ProviderID > findFirstProvider(SkillMap const &map, SkillID const &skillId)
Definition: SkillManagerWrapper.cpp:286
armarx::skills::SkillID::isProviderSpecified
bool isProviderSpecified() const
Definition: SkillID.cpp:90
armarx::skills::gui::SkillDetailsTreeWidget::updateContents
void updateContents(skills::SkillID const &skillId, skills::SkillDescription const &descr)
Definition: SkillDetailsTreeWidget.cpp:46
armarx::skills::gui::SkillDetailsTreeWidget::reloadLastExecutionParameters
void reloadLastExecutionParameters()
Definition: SkillDetailsTreeWidget.cpp:241
armarx::skills::gui::ProfileMenuWidget::changesSelector
QPushButton * changesSelector
Definition: ProfileMenuWidget.h:34
armarx::skills::gui::SkillDetailsTreeWidget::getShownId
std::optional< skills::SkillID > getShownId()
Definition: SkillDetailsTreeWidget.cpp:33
armarx::skills::gui::SkillDetailGroupBox::disconnectGui
void disconnectGui()
armarx::skills::gui::SkillDetailsTreeWidget::copyCurrentSkillID
void copyCurrentSkillID()
Definition: SkillDetailsTreeWidget.cpp:309
armarx::skills::gui::SkillDetailGroupBox::updateGui
void updateGui(SkillManagerWrapper::Snapshot update)
armarx::skills::gui::SkillDetailGroupBox::GROUP_BOX_TITLE
static const constexpr char * GROUP_BOX_TITLE
Definition: SkillDetailsGroupBox.h:25
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::skills::gui::SkillDetailsTreeWidget::copyCurrentConfig
void copyCurrentConfig()
Definition: SkillDetailsTreeWidget.cpp:296
SkillDetailsGroupBox.h
armarx::skills::gui
Definition: PeriodicUpdateWidget.cpp:11
armarx::skills::gui::SkillDetailsTreeWidget::getConfigAsAron
aron::data::DictPtr getConfigAsAron()
Definition: SkillDetailsTreeWidget.cpp:285
ProfileMenuWidget.h
armarx::skills::gui::SkillDetailsTreeWidget::disconnectGui
void disconnectGui()
Definition: SkillDetailsTreeWidget.cpp:91
armarx::skills::gui::ProfileMenuWidget::resetArgsToProfile
QPushButton * resetArgsToProfile
Definition: ProfileMenuWidget.h:31
armarx::skills::gui::SkillDetailsTreeWidget::updated
void updated(const skills::SkillID shownSkill)
armarx::skills::gui::SkillDetailsTreeWidget::resetWidget
void resetWidget()
Definition: SkillDetailsTreeWidget.cpp:362
armarx::skills::gui::SkillDescriptionWidget::setSkillDescription
void setSkillDescription(const skills::SkillDescription &desc)
Definition: SkillDescriptionWidget.cpp:62
armarx::skills::gui::SkillDetailGroupBox::updateSkillDetails
void updateSkillDetails(skills::SkillID &skillId)
Notify subwidgets of an updated skill selection.
Definition: SkillDetailsGroupBox.cpp:9
armarx::skills::gui::ProfileMenuWidget::copySkillIdToClipboard
QPushButton * copySkillIdToClipboard
Definition: ProfileMenuWidget.h:30
armarx::skills::SkillID
Definition: SkillID.h:14
armarx::skills::gui::SkillDetailsTreeWidget::pasteCurrentConfig
void pasteCurrentConfig()
Definition: SkillDetailsTreeWidget.cpp:321
armarx::skills::gui::SkillDetailGroupBox::EXECUTE_SKILL_BUTTON_TEXT
static const constexpr char * EXECUTE_SKILL_BUTTON_TEXT
Definition: SkillDetailsGroupBox.h:24