37 #include <QFormLayout>
39 #include <QHBoxLayout>
42 #include <QMessageBox>
43 #include <QPushButton>
45 #include <QVBoxLayout>
56 : QWidget(parent), additional_fields_(additional_fields)
59 QVBoxLayout* layout =
new QVBoxLayout();
61 QGroupBox* controller_options_group =
new QGroupBox(
"Controller Options");
64 title_ =
new QLabel(
this);
65 QFont group_title_font(QFont().defaultFamily(), 12, QFont::Bold);
66 title_->setFont(group_title_font);
67 layout->addWidget(title_);
69 QFormLayout* form_layout =
new QFormLayout();
70 form_layout->setContentsMargins(0, 15, 0, 15);
73 controller_name_field_ =
new QLineEdit(
this);
74 controller_name_field_->setMaximumWidth(400);
75 form_layout->addRow(
"Controller Name:", controller_name_field_);
78 controller_type_field_ =
new QComboBox(
this);
79 controller_type_field_->setEditable(
false);
80 controller_type_field_->setMaximumWidth(400);
81 connect(controller_type_field_, SIGNAL(currentIndexChanged(
int)),
this, SLOT(typeChanged(
int)));
82 form_layout->addRow(
"Controller Type:", controller_type_field_);
84 for (
const auto& field : additional_fields_)
86 QLineEdit*
input =
new QLineEdit(
this);
87 input->setMaximumWidth(400);
88 form_layout->addRow(field->display_name_.c_str(),
input);
89 additional_fields_inputs_.push_back(
input);
92 controller_options_group->setLayout(form_layout);
94 layout->addWidget(controller_options_group);
96 layout->setAlignment(Qt::AlignTop);
99 new_buttons_widget_ =
new QWidget();
100 QVBoxLayout* new_buttons_layout =
new QVBoxLayout();
102 QLabel* save_and_add =
new QLabel(
"Next, Add Components To Controller:",
this);
103 QFont save_and_add_font(QFont().defaultFamily(), 12, QFont::Bold);
104 save_and_add->setFont(save_and_add_font);
105 new_buttons_layout->addWidget(save_and_add);
107 QLabel* add_subtitle =
new QLabel(
"Recommended: ",
this);
108 QFont add_subtitle_font(QFont().defaultFamily(), 10, QFont::Bold);
109 add_subtitle->setFont(add_subtitle_font);
110 new_buttons_layout->addWidget(add_subtitle);
113 QPushButton* btn_save_groups_joints =
new QPushButton(
"Add Planning Group Joints",
this);
114 btn_save_groups_joints->setMaximumWidth(200);
115 connect(btn_save_groups_joints, SIGNAL(clicked()),
this, SIGNAL(
saveJointsGroups()));
116 new_buttons_layout->addWidget(btn_save_groups_joints);
118 QLabel* add_subtitle2 =
new QLabel(
"Advanced Options:",
this);
119 add_subtitle2->setFont(add_subtitle_font);
120 new_buttons_layout->addWidget(add_subtitle2);
123 QPushButton* btn_save_joints =
new QPushButton(
"Add Individual Joints",
this);
124 btn_save_joints->setMaximumWidth(200);
125 connect(btn_save_joints, SIGNAL(clicked()),
this, SIGNAL(
saveJoints()));
126 new_buttons_layout->addWidget(btn_save_joints);
129 new_buttons_widget_->setLayout(new_buttons_layout);
130 layout->addWidget(new_buttons_widget_);
133 layout->addItem(
new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
136 QHBoxLayout* controls_layout =
new QHBoxLayout();
139 btn_delete_ =
new QPushButton(
"&Delete Controller",
this);
140 btn_delete_->setMaximumWidth(200);
142 controls_layout->addWidget(btn_delete_);
143 controls_layout->setAlignment(btn_delete_, Qt::AlignRight);
146 controls_layout->addItem(
new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
149 btn_save_ =
new QPushButton(
"&Save",
this);
150 btn_save_->setMaximumWidth(200);
151 connect(btn_save_, SIGNAL(clicked()),
this, SIGNAL(
save()));
152 controls_layout->addWidget(btn_save_);
153 controls_layout->setAlignment(btn_save_, Qt::AlignRight);
156 QPushButton* btn_cancel =
new QPushButton(
"&Cancel",
this);
157 btn_cancel->setMaximumWidth(200);
158 connect(btn_cancel, SIGNAL(clicked()),
this, SIGNAL(
cancelEditing()));
159 controls_layout->addWidget(btn_cancel);
160 controls_layout->setAlignment(btn_cancel, Qt::AlignRight);
163 layout->addLayout(controls_layout);
166 this->setLayout(layout);
174 controller_name_field_->setText(QString(controller_name.c_str()));
175 if (searched_controller !=
nullptr)
177 const std::string controller_type = searched_controller->
type_;
178 int type_index = controller_type_field_->findText(controller_type.c_str());
181 if (type_index == -1)
183 QMessageBox::warning(
this,
"Missing Controller Type", QString(
"Setting controller type to the default value"));
188 controller_type_field_->setCurrentIndex(type_index);
191 for (
unsigned int i = 0; i < additional_fields_.size(); i++)
193 std::string key = additional_fields_[i]->parameter_name_;
194 const auto& it = searched_controller->
parameters_.find(key);
197 additional_fields_inputs_[i]->setText(it->second.c_str());
203 controller_type_field_->setCurrentIndex(0);
218 controller_type_field_->clear();
221 for (
const std::string&
type : controller_types)
222 controller_type_field_->addItem(
type.c_str());
237 new_buttons_widget_->hide();
252 new_buttons_widget_->show();
257 title_->setText(title);
262 return controller_name_field_->text().trimmed().toStdString();
267 return controller_type_field_->currentText().toStdString();
272 std::map<std::string, std::string> parameters;
273 for (
unsigned int i = 0; i < additional_fields_.size(); i++)
275 std::string key = additional_fields_[i]->parameter_name_;
276 std::string value = additional_fields_inputs_[i]->text().trimmed().toStdString();
277 parameters[key] = value;
282 void ControllerEditWidget::typeChanged(
int )
285 for (
unsigned int i = 0; i < additional_fields_.size(); i++)
287 std::string new_value = additional_fields_[i]->getDefaultValue(controller_type);
288 additional_fields_inputs_[i]->setText(new_value.c_str());
std::vector< std::shared_ptr< AdditionalControllerField > > FieldPointers
Convenience alias.
std::map< std::string, std::string > parameters_