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 }