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.List;
21
22 import org.vectomatic.client.rep.command.ChangeOrderingCommand;
23 import org.vectomatic.client.rep.view.DrawingView;
24 import org.vectomatic.common.model.IShapeVisitor;
25 import org.vectomatic.common.model.Shape;
26 import org.vectomatic.common.model.geometry.Ellipse;
27 import org.vectomatic.common.model.geometry.Path;
28 import org.vectomatic.common.model.geometry.Polyline;
29 import org.vectomatic.common.model.geometry.Rect;
30 import org.vectomatic.common.model.geometry.ShapeGroup;
31
32 import com.google.gwt.user.client.ui.MenuBar;
33
34
35
36
37
38 public class ContextualMenuVisitor implements IShapeVisitor {
39 private MenuBar _shapeBar;
40 private MenuBar _shapeGroupBar;
41 private MenuBar _multiSelBar;
42 private MenuBar _bar;
43
44 public MenuBar getContextualMenu(ShapeSelection selection) {
45 List<Shape> selectedShapes = selection.getSelectedShapes();
46 if (selectedShapes.size() == 0) {
47 _bar = null;
48 } else if (selectedShapes.size() > 1) {
49 _bar = _multiSelBar;
50 } else {
51 selectedShapes.get(0).acceptVisitor(this);
52 }
53 return _bar;
54 }
55
56 public ContextualMenuVisitor(
57 DeleteController deleteController,
58 UngroupController ungroupController,
59 GroupController groupController,
60 OrderingController orderingController,
61 DrawingView view) {
62 _shapeBar = new MenuBar(true);
63 _shapeBar.addItem(deleteController.newDeleteContextItem(view));
64 _shapeBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.BRING_TO_FRONT));
65 _shapeBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.SEND_TO_BACK));
66 _shapeBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.BRING_FORWARD));
67 _shapeBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.SEND_BACKWARD));
68
69 _shapeGroupBar = new MenuBar(true);
70 _shapeGroupBar.addItem(deleteController.newDeleteContextItem(view));
71 _shapeGroupBar.addItem(ungroupController.getUngroupContextItem());
72 _shapeGroupBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.BRING_TO_FRONT));
73 _shapeGroupBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.SEND_TO_BACK));
74 _shapeGroupBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.BRING_FORWARD));
75 _shapeGroupBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.SEND_BACKWARD));
76
77 _multiSelBar = new MenuBar(true);
78 _multiSelBar.addItem(deleteController.newDeleteContextItem(view));
79 _multiSelBar.addItem(groupController.getGroupContextItem());
80 _multiSelBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.BRING_TO_FRONT));
81 _multiSelBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.SEND_TO_BACK));
82 _multiSelBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.BRING_FORWARD));
83 _multiSelBar.addItem(orderingController.newContextItem(view, ChangeOrderingCommand.SEND_BACKWARD));
84 }
85
86 public void visitEllipse(Ellipse ellipse) {
87 _bar = _shapeBar;
88 }
89
90 public void visitPolyline(Polyline polyline) {
91 _bar = _shapeBar;
92 }
93
94 public void visitRect(Rect rect) {
95 _bar = _shapeBar;
96 }
97
98 public void visitShapeGroup(ShapeGroup group) {
99 _bar = _shapeGroupBar;
100 }
101
102 public void visitPath(Path path) {
103
104
105 }
106
107 }