| 252 | } |
| 253 | |
| 254 | void GraphicContainer::createSubtree(Node &root_node, QString subtree_name ) |
| 255 | { |
| 256 | bool ok = false; |
| 257 | if( subtree_name.isEmpty() ) |
| 258 | { |
| 259 | subtree_name = QInputDialog::getText ( |
| 260 | nullptr, tr ("SubTree Name"), |
| 261 | tr ("Insert the name of the Custom SubTree"), |
| 262 | QLineEdit::Normal, "", &ok); |
| 263 | if (!ok) |
| 264 | { |
| 265 | return; |
| 266 | } |
| 267 | } |
| 268 | |
| 269 | auto main_win = dynamic_cast<MainWindow*>( parent() ); |
| 270 | |
| 271 | if( main_win->getTabByName(subtree_name) != nullptr || |
| 272 | _model_registry->registeredModelsByCategory("SubTree").count( subtree_name )) |
| 273 | { |
| 274 | QMessageBox::warning( nullptr, "SubTree already exists", |
| 275 | tr("There is already a SubTree called [%1].\n" |
| 276 | "Use another name.").arg(subtree_name), |
| 277 | QMessageBox::Ok); |
| 278 | return; |
| 279 | } |
| 280 | |
| 281 | addNewModel( { NodeType::SUBTREE, subtree_name, {}} ); |
| 282 | QApplication::processEvents(); |
| 283 | |
| 284 | auto sub_tree = BuildTreeFromScene(_scene, &root_node); |
| 285 | |
| 286 | for(auto& abs_node: sub_tree.nodes()) |
| 287 | { |
| 288 | if( &abs_node == sub_tree.rootNode() ) |
| 289 | { |
| 290 | continue; |
| 291 | } |
| 292 | _scene->removeNode( *abs_node.graphic_node ); |
| 293 | abs_node.graphic_node = nullptr; |
| 294 | } |
| 295 | substituteNode( sub_tree.rootNode()->graphic_node, subtree_name); |
| 296 | |
| 297 | nodeReorder(); |
| 298 | |
| 299 | emit requestSubTreeCreate( sub_tree, subtree_name ); |
| 300 | } |
| 301 | |
| 302 | void GraphicContainer::onNodeDoubleClicked(Node &root_node) |
| 303 | { |