void removeChild(IFigure child) {
   if (connectionToPaths == null) {
     return;
   }
   Rectangle bounds = child.getBounds().getCopy();
   boolean change = false;
   algorithm.removeObstacle(bounds);
   figuresToBounds.remove(child);
   child.removeFigureListener(figureListener);
   if (change) {
     isDirty = true;
     queueSomeRouting();
   }
 }
        public void fisheyeReplaced(
            GraphWidget graph, IFigure oldFisheyeFigure, IFigure newFisheyeFigure) {
          oldFisheyeFigure.removeFigureListener(nodeFigureListener);
          newFisheyeFigure.addFigureListener(nodeFigureListener);
          GraphLabel label = (GraphLabel) nodeFigureToLabel.remove(oldFisheyeFigure);
          nodeFigureToLabel.put(newFisheyeFigure, label);

          LabelAncestorListener ancestorListener =
              (LabelAncestorListener) labelToAncestorListener.get(label);
          ancestorListener.fisheyeFigure = null;
          addLabelForFigure(newFisheyeFigure, label);
          ancestorListener.fisheyeFigure = newFisheyeFigure;
          refreshLabelBounds(newFisheyeFigure, label);
        }
 public void fisheyeAdded(GraphWidget graph, IFigure originalFigure, IFigure fisheyeFigure) {
   originalFigure.removeFigureListener(nodeFigureListener);
   fisheyeFigure.addFigureListener(nodeFigureListener);
   GraphLabel label = (GraphLabel) nodeFigureToLabel.get(originalFigure);
   if (label == null) {
     return;
   }
   nodeFigureToLabel.put(fisheyeFigure, label);
   refreshLabelBounds(fisheyeFigure, label);
   addLabelForFigure(fisheyeFigure, label);
   LabelAncestorListener labelAncestorListener =
       new LabelAncestorListener(originalFigure, fisheyeFigure);
   label.addAncestorListener(labelAncestorListener);
   labelToAncestorListener.put(label, labelAncestorListener);
 }
 public void ancestorRemoved(IFigure ancestor) {
   if (fisheyeFigure != null) {
     final GraphLabel label = (GraphLabel) nodeFigureToLabel.get(fisheyeFigure);
     if (label == null) {
       return;
     }
     nodeFigureToLabel.remove(fisheyeFigure);
     Display.getDefault()
         .asyncExec(
             new Runnable() {
               public void run() {
                 label.removeAncestorListener(LabelAncestorListener.this);
               }
             });
     fisheyeFigure.removeFigureListener(nodeFigureListener);
     originalFigure.addFigureListener(nodeFigureListener);
     labelToAncestorListener.remove(label);
     fisheyeFigure = null;
     addLabelForFigure(originalFigure, label);
     refreshLabelBounds(originalFigure, label);
   }
 }