1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.vectomatic.client.rep.controller;
19
20 import java.util.ArrayList;
21 import java.util.List;
22
23 import org.vectomatic.client.rep.ClipBoard;
24 import org.vectomatic.client.rep.RepApplication;
25 import org.vectomatic.client.rep.command.PasteCommand;
26 import org.vectomatic.client.rep.events.IClipBoardListener;
27 import org.vectomatic.client.rep.view.DrawingView;
28 import org.vectomatic.common.model.CloneShapeVisitor;
29 import org.vectomatic.common.model.Shape;
30 import org.vectomatic.common.model.geometry.Point;
31
32
33
34
35
36 public class PasteController extends ControllerBase implements IClipBoardListener {
37 private ControllerMenuItem _pasteMenuItem;
38 private CloneShapeVisitor _cloner;
39 private int _pasteCount;
40
41 public PasteController(RepApplication app) {
42 super(app);
43 _app.getClipboard().addShapeSelectionListener(this);
44 _pasteMenuItem = new ControllerMenuItem(_app.getView(), app.getConstants().pasteCommand(), this);
45 _cloner = new CloneShapeVisitor();
46 clipBoardChanged(_app.getClipboard());
47 }
48
49 @Override
50 public void activate(DrawingView view) {
51 _pasteCount++;
52
53 List<Shape> clipBoardShapes = (List<Shape>)_app.getClipboard().getContent();
54 List<Shape> clonedShapes = new ArrayList<Shape>();
55 float d = view.convertToReferenceLength(5);
56 Point p1 = new Point();
57 Point p2 = new Point(_pasteCount * d, _pasteCount * d);
58 for (int i = 0, size = clipBoardShapes.size(); i < size; i++) {
59 Shape shape = clipBoardShapes.get(i);
60 shape.acceptVisitor(_cloner);
61 Shape clonedShape = _cloner.getClone();
62
63
64 clonedShape.setTranslation(clonedShape.getTranslation(p1).add(p2));
65 clonedShapes.add(clonedShape);
66 }
67
68 PasteCommand pasteCommand = new PasteCommand(_app, clonedShapes);
69
70
71 pasteCommand.execute();
72 _app.getHistory().addCommand(pasteCommand);
73 }
74
75 public ControllerMenuItem getPasteMenuItem() {
76 return _pasteMenuItem;
77 }
78
79 public void clipBoardChanged(ClipBoard clipBoard) {
80 _pasteMenuItem.setEnabled(_app.getClipboard().getContent() != null);
81 _pasteCount = 0;
82 }
83
84 }