| 313 | } |
| 314 | |
| 315 | void TOPPASScene::copySelected() |
| 316 | { |
| 317 | TOPPASScene* tmp_scene = new TOPPASScene(nullptr, this->getTempDir(), false); |
| 318 | std::map<TOPPASVertex*, TOPPASVertex*> vertex_map; |
| 319 | |
| 320 | foreach(TOPPASVertex* v, vertices_) |
| 321 | { |
| 322 | if (!v->isSelected()) |
| 323 | { |
| 324 | continue; |
| 325 | } |
| 326 | |
| 327 | TOPPASVertex* new_v = nullptr; |
| 328 | |
| 329 | TOPPASInputFileListVertex* iflv = qobject_cast<TOPPASInputFileListVertex*>(v); |
| 330 | if (iflv) |
| 331 | { |
| 332 | TOPPASInputFileListVertex* new_iflv = new TOPPASInputFileListVertex(*iflv); |
| 333 | new_v = new_iflv; |
| 334 | } |
| 335 | |
| 336 | TOPPASOutputFileListVertex* oflv = qobject_cast<TOPPASOutputFileListVertex*>(v); |
| 337 | if (oflv) |
| 338 | { |
| 339 | TOPPASOutputFileListVertex* new_oflv = new TOPPASOutputFileListVertex(*oflv); |
| 340 | new_v = new_oflv; |
| 341 | } |
| 342 | |
| 343 | TOPPASToolVertex* tv = qobject_cast<TOPPASToolVertex*>(v); |
| 344 | if (tv) |
| 345 | { |
| 346 | TOPPASToolVertex* new_tv = new TOPPASToolVertex(*tv); |
| 347 | new_v = new_tv; |
| 348 | } |
| 349 | |
| 350 | TOPPASMergerVertex* mv = qobject_cast<TOPPASMergerVertex*>(v); |
| 351 | if (mv) |
| 352 | { |
| 353 | TOPPASMergerVertex* new_mv = new TOPPASMergerVertex(*mv); |
| 354 | new_v = new_mv; |
| 355 | } |
| 356 | |
| 357 | TOPPASSplitterVertex* sv = qobject_cast<TOPPASSplitterVertex*>(v); |
| 358 | if (sv) |
| 359 | { |
| 360 | TOPPASSplitterVertex* new_sv = new TOPPASSplitterVertex(*sv); |
| 361 | new_v = new_sv; |
| 362 | } |
| 363 | |
| 364 | if (!new_v) |
| 365 | { |
| 366 | std::cerr << "Unknown vertex type! Aborting." << std::endl; |
| 367 | return; |
| 368 | } |
| 369 | |
| 370 | vertex_map[v] = new_v; |
| 371 | tmp_scene->addVertex(new_v); |
| 372 | } |