@@ -117,11 +117,14 @@ NodeModel CustomNodeDialog::getTreeNodeModel() const
117117 }
118118 for (int row=0 ; row < ui->tableWidget ->rowCount (); row++ )
119119 {
120+ PortModel port_model;
120121 const QString key = ui->tableWidget ->item (row,0 )->text ();
122+
121123 auto combo = static_cast <QComboBox*>(ui->tableWidget ->cellWidget (row,1 ));
122- const QString direction = combo->currentText ();
123124
124- PortModel port_model;
125+ const QString direction = (combo) ? combo->currentText () :
126+ ui->tableWidget ->item (row,1 )->text ();
127+
125128 port_model.direction = BT::convertFromString<PortDirection>(direction.toStdString ());
126129 port_model.default_value = ui->tableWidget ->item (row,2 )->text ();
127130 port_model.description = ui->tableWidget ->item (row,3 )->text ();
@@ -249,3 +252,40 @@ void CustomNodeDialog::on_pushButtonRemove_pressed()
249252 }
250253 checkValid ();
251254}
255+
256+ void CustomNodeDialog::on_comboBox_currentIndexChanged (const QString &node_type)
257+ {
258+ auto shared_items = ui->tableWidget ->findItems (" __shared_blackboard" , Qt::MatchExactly);
259+ if ( node_type == " SubTree" )
260+ {
261+ if ( shared_items.empty () )
262+ {
263+ int row = ui->tableWidget ->rowCount ();
264+ ui->tableWidget ->setRowCount (row+1 );
265+
266+ auto key_item = new QTableWidgetItem (" __shared_blackboard" );
267+ key_item->setFlags (key_item->flags () & ~Qt::ItemIsEditable );
268+
269+ auto direction_item = new QTableWidgetItem (" Input" );
270+ direction_item->setFlags (direction_item->flags () & ~Qt::ItemIsEditable );
271+
272+ auto value_item = new QTableWidgetItem (" false" );
273+
274+ auto description_item = new QTableWidgetItem (" If false (default), the Subtree has an isolated blackboard and needs port remapping" );
275+ description_item->setFlags (description_item->flags () & ~Qt::ItemIsEditable );
276+
277+ ui->tableWidget ->setItem (row, 0 , key_item);
278+ ui->tableWidget ->setItem (row, 1 , direction_item);
279+ ui->tableWidget ->setItem (row, 2 , value_item);
280+ ui->tableWidget ->setItem (row, 3 , description_item);
281+ }
282+ }
283+ else
284+ {
285+ for ( const auto & item: shared_items)
286+ {
287+ ui->tableWidget ->removeRow ( item->row () );
288+ }
289+ }
290+ checkValid ();
291+ }
0 commit comments