| 2516 | } |
| 2517 | |
| 2518 | void |
| 2519 | LayoutViewBase::erase_cellview (unsigned int index) |
| 2520 | { |
| 2521 | if (index >= m_cellviews.size ()) { |
| 2522 | return; |
| 2523 | } |
| 2524 | |
| 2525 | cancel_esc (); |
| 2526 | |
| 2527 | // issue to event that signals a change in the cellviews |
| 2528 | cellviews_about_to_change_event (); |
| 2529 | |
| 2530 | // no undo available - clear all transactions |
| 2531 | if (manager ()) { |
| 2532 | manager ()->clear (); |
| 2533 | } |
| 2534 | |
| 2535 | begin_layer_updates (); |
| 2536 | |
| 2537 | m_cellviews.erase (cellview_iter (int (index))); |
| 2538 | |
| 2539 | if (m_hidden_cells.size () > index) { |
| 2540 | m_hidden_cells.erase (m_hidden_cells.begin () + index); |
| 2541 | } |
| 2542 | |
| 2543 | if (m_current_cell_per_cellview.size () > index) { |
| 2544 | m_current_cell_per_cellview.erase (m_current_cell_per_cellview.begin () + index); |
| 2545 | } |
| 2546 | |
| 2547 | for (unsigned int lindex = 0; lindex < layer_lists (); ++lindex) { |
| 2548 | |
| 2549 | // remove all references to the cellview |
| 2550 | m_layer_properties_lists [lindex]->remove_cv_references (index); |
| 2551 | |
| 2552 | // rename the ones that got shifted. |
| 2553 | lay::LayerPropertiesConstIterator l = begin_layers (lindex); |
| 2554 | while (! l.at_end ()) { |
| 2555 | lay::ParsedLayerSource source (l->source (false)); |
| 2556 | if (source.cv_index () >= int (index)) { |
| 2557 | lay::LayerProperties new_props (*l); |
| 2558 | source.cv_index (source.cv_index () == int (index) ? -1 : source.cv_index () - 1); |
| 2559 | new_props.set_source (source); |
| 2560 | LayerPropertiesIterator non_const_iter (*m_layer_properties_lists [lindex], l.uint ()); |
| 2561 | *non_const_iter = new_props; |
| 2562 | } |
| 2563 | ++l; |
| 2564 | } |
| 2565 | |
| 2566 | } |
| 2567 | |
| 2568 | // clear the history |
| 2569 | m_display_states.clear (); |
| 2570 | m_display_state_ptr = 0; |
| 2571 | |
| 2572 | end_layer_updates (); |
| 2573 | |
| 2574 | // signal to the observers that something has changed |
| 2575 | layer_list_changed_event (3); |