View Javadoc

1   /**********************************************
2    * Copyright (C) 2009 Lukas Laag
3    * This file is part of Vectomatic.
4    * 
5    * Vectomatic is free software: you can redistribute it and/or modify
6    * it under the terms of the GNU General Public License as published by
7    * the Free Software Foundation, either version 3 of the License, or
8    * (at your option) any later version.
9    * 
10   * Vectomatic is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   * GNU General Public License for more details.
14   * 
15   * You should have received a copy of the GNU General Public License
16   * along with Vectomatic.  If not, see http://www.gnu.org/licenses/
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   * Shape visitor implementation to set the items in
36   * the contextual menu depending on the selection
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 		// TODO Auto-generated method stub
104 		
105 	}
106 
107 }