| 1390 | } |
| 1391 | |
| 1392 | void MainWindow::onTabRenameRequested(int tab_index, QString new_name) |
| 1393 | { |
| 1394 | QString old_name = this->ui->tabWidget->tabText(tab_index); |
| 1395 | |
| 1396 | if( new_name.isEmpty()) |
| 1397 | { |
| 1398 | bool ok = false; |
| 1399 | new_name = QInputDialog::getText ( |
| 1400 | this, tr ("Change name"), |
| 1401 | tr ("Insert the new name of this BehaviorTree"), |
| 1402 | QLineEdit::Normal, old_name, &ok); |
| 1403 | if (!ok) |
| 1404 | { |
| 1405 | return; |
| 1406 | } |
| 1407 | } |
| 1408 | |
| 1409 | if( new_name == old_name) |
| 1410 | { |
| 1411 | return; |
| 1412 | } |
| 1413 | if( getTabByName(new_name) ) |
| 1414 | { |
| 1415 | QMessageBox::warning( this, "Tab name already is use", |
| 1416 | tr("There is already a BehaviorTree called [%1].\n" |
| 1417 | "Use another name.").arg(new_name), |
| 1418 | QMessageBox::Ok); |
| 1419 | return; |
| 1420 | } |
| 1421 | |
| 1422 | ui->tabWidget->setTabText (tab_index, new_name); |
| 1423 | auto it = _tab_info.find(old_name); |
| 1424 | auto container = it->second; |
| 1425 | _tab_info.insert( {new_name, container} ); |
| 1426 | _tab_info.erase( it ); |
| 1427 | if( _main_tree == old_name ) |
| 1428 | { |
| 1429 | _main_tree = new_name; |
| 1430 | } |
| 1431 | |
| 1432 | // if a subtree SUBTREE already |
| 1433 | if( _model_registry->registeredModelsByCategory("SubTree").count( old_name ) != 0 ) |
| 1434 | { |
| 1435 | _model_registry->unregisterModel(old_name); |
| 1436 | _treenode_models.erase(old_name); |
| 1437 | NodeModel model = { NodeType::SUBTREE, new_name, {}}; |
| 1438 | onAddToModelRegistry( model ); |
| 1439 | _treenode_models.insert( { new_name, model} ); |
| 1440 | _editor_widget->updateTreeView(); |
| 1441 | this->onTreeNodeEdited(old_name, new_name); |
| 1442 | } |
| 1443 | |
| 1444 | // TODO: this is a work around until we find a better solution |
| 1445 | clearUndoStacks(); |
| 1446 | } |
| 1447 | |
| 1448 | |
| 1449 | void MainWindow::onTabSetMainTree(int tab_index) |