Esempio n. 1
0
 public void execute() {
   Point lastClick = view().lastClick();
   FigureSelection selection = (FigureSelection) Clipboard.getClipboard().getContents();
   if (selection != null) {
     FigureEnumerator affectedFigures =
         (FigureEnumerator) selection.getData(StandardFigureSelection.TYPE);
     if (! /*@AJHD getUndoActivity().getAffectedFigures()*/affectedFigures.hasNextFigure()) {
       return;
     }
     Rectangle r = getBounds(affectedFigures);
     affectedFigures.reset();
     view().clearSelection();
     FigureEnumeration fe = insertFigures(affectedFigures, lastClick.x - r.x, lastClick.y - r.y);
   }
 }
  /**
   * Inserts a FigureEnumeration of figures and translates them by the given offset. This function
   * is used to insert figures from clipboards (cut/copy)
   *
   * @return enumeration which has been added to the drawing. The figures in the enumeration can
   *     have changed during adding them (e.g. they could have been decorated).
   */
  public FigureEnumeration insertFigures(FigureEnumeration fe, int dx, int dy, boolean bCheck) {
    if (fe == null) {
      return FigureEnumerator.getEmptyEnumeration();
    }

    List vCF = CollectionsFactory.current().createList(10);
    InsertIntoDrawingVisitor visitor = new InsertIntoDrawingVisitor(drawing());

    while (fe.hasNextFigure()) {
      Figure figure = fe.nextFigure();
      if (figure instanceof ConnectionFigure) {
        vCF.add(figure);
      } else if (figure != null) {
        figure.moveBy(dx, dy);
        figure.visit(visitor);
      }
    }

    FigureEnumeration ecf = new FigureEnumerator(vCF);

    while (ecf.hasNextFigure()) {
      ConnectionFigure cf = (ConnectionFigure) ecf.nextFigure();
      Figure sf = cf.startFigure();
      Figure ef = cf.endFigure();

      if (figureExists(sf, drawing().figures())
          && figureExists(ef, drawing().figures())
          && (!bCheck || cf.canConnect(sf, ef))) {

        if (bCheck) {
          Point sp = sf.center();
          Point ep = ef.center();
          Connector fStartConnector = cf.startFigure().connectorAt(ep.x, ep.y);
          Connector fEndConnector = cf.endFigure().connectorAt(sp.x, sp.y);

          if (fEndConnector != null && fStartConnector != null) {
            cf.connectStart(fStartConnector);
            cf.connectEnd(fEndConnector);
            cf.updateConnection();
          }
        }

        cf.visit(visitor);
      }
    }

    addToSelectionAll(visitor.getInsertedFigures());
    return visitor.getInsertedFigures();
  }