void (final Collection<? extends RadComponent> selection, boolean deleteEmptyCells) { if (selection.size() == 0) { return; } final RadRootContainer rootContainer = (RadRootContainer)getRoot(selection.iterator().next()); final Set<String> deletedComponentIds = new HashSet<>(); for (final RadComponent component : selection) { boolean wasSelected = component.isSelected(); final RadContainer parent = component.getParent(); boolean wasPackedHorz = false; boolean wasPackedVert = false; if (parent.getParent() != null && parent.getParent().isXY()) { final Dimension minSize = parent.getMinimumSize(); wasPackedHorz = parent.getWidth() == minSize.width; wasPackedVert = parent.getHeight() == minSize.height; } iterate(component, new ComponentVisitor() { @Override public boolean visit(final IComponent c) { RadComponent rc = (RadComponent)c; BindingProperty.checkRemoveUnusedField(rootContainer, rc.getBinding(), null); deletedComponentIds.add(rc.getId()); return true; } }); GridConstraints delConstraints = parent.getLayoutManager().isGrid() ? component.getConstraints() : null; int index = parent.indexOfComponent(component); parent.removeComponent(component); if (wasSelected) { if (parent.getComponentCount() > index) { parent.getComponent(index).setSelected(true); } else if (index > 0 && parent.getComponentCount() == index) { parent.getComponent(index - 1).setSelected(true); } else { parent.setSelected(true); } } if (delConstraints != null && deleteEmptyCells) { deleteEmptyGridCells(parent, delConstraints); } if (wasPackedHorz || wasPackedVert) { final Dimension minSize = parent.getMinimumSize(); Dimension newSize = new Dimension(parent.getWidth(), parent.getHeight()); if (wasPackedHorz) { newSize.width = minSize.width; } if (wasPackedVert) { newSize.height = minSize.height; } parent.setSize(newSize); } } iterate(rootContainer, new ComponentVisitor() { @Override public boolean visit(final IComponent component) { RadComponent rc = (RadComponent)component; for (IProperty p : component.getModifiedProperties()) { if (p instanceof IntroComponentProperty icp) { final String value = icp.getValue(rc); if (deletedComponentIds.contains(value)) { try { icp.resetValue(rc); } catch (Exception e) { // ignore } } } } return true; } }); }