37 #include <QVBoxLayout>
38 #include <QHBoxLayout>
40 #include <QPushButton>
41 #include <QGridLayout>
43 #include <QMessageBox>
45 #include <QTreeWidget>
54 : QWidget(parent), config_data_(config_data)
57 QVBoxLayout* layout =
new QVBoxLayout();
60 title_ =
new QLabel(
"",
this);
61 QFont group_title_font(QFont().defaultFamily(), 12, QFont::Bold);
62 title_->setFont(group_title_font);
63 layout->addWidget(title_);
66 link_tree_ =
new QTreeWidget(
this);
67 link_tree_->setHeaderLabel(
"Robot Links");
68 connect(link_tree_, SIGNAL(itemSelectionChanged()),
this, SLOT(itemSelected()));
69 layout->addWidget(link_tree_);
72 QGridLayout* form_grid =
new QGridLayout();
73 form_grid->setContentsMargins(20, 20, 20, 20);
76 QLabel* base_link_label =
new QLabel(
"Base Link",
this);
77 form_grid->addWidget(base_link_label, 0, 0, Qt::AlignRight);
79 base_link_field_ =
new QLineEdit(
this);
80 base_link_field_->setMinimumWidth(300);
81 form_grid->addWidget(base_link_field_, 0, 1, Qt::AlignLeft);
83 QPushButton* btn_base_link =
new QPushButton(
"Choose Selected",
this);
84 connect(btn_base_link, SIGNAL(clicked()),
this, SLOT(baseLinkTreeClick()));
85 form_grid->addWidget(btn_base_link, 0, 2, Qt::AlignLeft);
88 QLabel* tip_link_label =
new QLabel(
"Tip Link",
this);
89 form_grid->addWidget(tip_link_label, 1, 0, Qt::AlignRight);
91 tip_link_field_ =
new QLineEdit(
this);
92 tip_link_field_->setMinimumWidth(300);
93 form_grid->addWidget(tip_link_field_, 1, 1, Qt::AlignLeft);
95 QPushButton* btn_tip_link =
new QPushButton(
"Choose Selected",
this);
96 connect(btn_tip_link, SIGNAL(clicked()),
this, SLOT(tipLinkTreeClick()));
97 form_grid->addWidget(btn_tip_link, 1, 2, Qt::AlignLeft);
100 layout->addLayout(form_grid);
103 QHBoxLayout* controls_layout =
new QHBoxLayout();
106 QLabel* expand_controls =
new QLabel(
this);
107 expand_controls->setText(
"<a href='expand'>Expand All</a> <a href='contract'>Collapse All</a>");
108 connect(expand_controls, SIGNAL(linkActivated(
const QString)),
this, SLOT(alterTree(
const QString)));
109 controls_layout->addWidget(expand_controls);
112 controls_layout->addItem(
new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
115 QPushButton* btn_save =
new QPushButton(
"&Save",
this);
116 btn_save->setMaximumWidth(200);
117 connect(btn_save, SIGNAL(clicked()),
this, SIGNAL(doneEditing()));
118 controls_layout->addWidget(btn_save);
119 controls_layout->setAlignment(btn_save, Qt::AlignRight);
122 QPushButton* btn_cancel =
new QPushButton(
"&Cancel",
this);
123 btn_cancel->setMaximumWidth(200);
124 connect(btn_cancel, SIGNAL(clicked()),
this, SIGNAL(cancelEditing()));
125 controls_layout->addWidget(btn_cancel);
126 controls_layout->setAlignment(btn_cancel, Qt::AlignRight);
129 layout->addLayout(controls_layout);
132 this->setLayout(layout);
135 kinematic_chain_loaded_ =
false;
148 const moveit::core::RobotModelConstPtr& model =
config_data_->getRobotModel();
166 QTreeWidgetItem* new_item =
new QTreeWidgetItem(
link_tree_);
169 if (parent ==
nullptr)
171 new_item->setText(0, link->
getName().c_str());
176 for (
int i = 0; i <
link_tree_->topLevelItemCount(); i++)
194 const std::string& parent_name)
196 if (parent->text(0).toStdString() == parent_name)
198 QTreeWidgetItem* new_item =
new QTreeWidgetItem(parent);
199 new_item->setText(0, link->
getName().c_str());
201 parent->addChild(new_item);
206 for (
int i = 0; i < parent->childCount(); i++)
232 QTreeWidgetItem* item =
link_tree_->currentItem();
244 QTreeWidgetItem* item =
link_tree_->currentItem();
256 if (link.contains(
"expand"))
267 QTreeWidgetItem* item =
link_tree_->currentItem();
272 std::string
name = item->text(0).toStdString();
279 Q_EMIT
highlightLink(item->text(0).toStdString(), QColor(255, 0, 0));