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_