internal void removeItem(ChartObject item) { selection.RemoveObject(item); if (item == autoHandlesObj) autoHandlesObj = null; if (item == autoAnchorsObj) autoAnchorsObj = null; switch (item.getType()) { case ItemType.Box: boxes.Remove((Box)item); break; case ItemType.ControlHost: controlHosts.Remove((ControlHost)item); break; case ItemType.Table: tables.Remove((Table)item); break; case ItemType.Arrow: arrows.Remove((Arrow)item); break; } removeFromZOrder(item); MethodCallVisitor visitor = new MethodCallVisitor(new VisitOperation(removeFromSelection)); switch (item.getType()) { case ItemType.ControlHost: { ControlHost host = (ControlHost)item; host.visitArrows(visitor); host.deleteArrows(); } break; case ItemType.Box: { Box box = (Box)item; box.visitArrows(visitor); box.deleteArrows(); } break; case ItemType.Table: { Table table = (Table)item; table.visitArrows(visitor); table.deleteArrows(); } break; case ItemType.Arrow: { Arrow arrow = (Arrow)item; arrow.resetCrossings(); arrow.getDestLink().removeArrowFromObj(); arrow.getOrgnLink().removeArrowFromObj(); } break; } item.onRemove(); // update document size if needed if (autoSizeDoc != MindFusion.FlowChartX.AutoSize.None) sizeDocForItems(); }