View Javadoc

1   /*
2    * Trip Tracker, a real-time position tracking system for the Internet.
3    * Copyright (C) 2006  Team Trip Tracker
4    *
5    * This program is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License as published by the
7    * Free Software Foundation; either version 2 of the License, or (at your
8    * option) any later version.
9    *
10   * This program is distributed in the hope that it will be useful, but
11   * WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13   * General Public License for more details.
14   *
15   * You should have received a copy of the GNU General Public License along
16   * with this program; if not, write to the Free Software Foundation, Inc.,
17   * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
18   */
19  
20  package triptracker.client.map.ui;
21  
22  import static triptracker.core.Utils.getImageIcon;
23  
24  import java.awt.BorderLayout;
25  import java.awt.FlowLayout;
26  import java.awt.event.ActionListener;
27  import java.awt.event.ItemListener;
28  import java.awt.event.KeyEvent;
29  import java.awt.event.MouseListener;
30  import java.io.IOException;
31  import java.util.List;
32  
33  import javax.swing.BorderFactory;
34  import javax.swing.ButtonGroup;
35  import javax.swing.ImageIcon;
36  import javax.swing.JButton;
37  import javax.swing.JComboBox;
38  import javax.swing.JLabel;
39  import javax.swing.JPanel;
40  import javax.swing.JRadioButton;
41  import javax.swing.border.EtchedBorder;
42  
43  import triptracker.client.net.MapSocket;
44  import triptracker.client.net.MapSocketListener;
45  import triptracker.core.ConnectionState;
46  import triptracker.core.Coordinate;
47  import triptracker.core.Route;
48  import triptracker.core.User;
49  
50  @SuppressWarnings("serial")
51  public class MapViewPanel extends SuperPanel implements MapSocketListener {
52  //	private MapSocket model;
53  	private TabbedForm view;
54  //	private JPanel mapPanel;
55  	private JPanel keyPanel;
56  		
57  	private ButtonGroup btnGr;
58  	private JRadioButton zoom;
59  	private JLabel zoomLabel;
60  	private JRadioButton move;
61  	private JLabel moveLabel;
62  	private JComboBox followBox;
63  	private JButton zoomIn;
64  	private JButton zoomOut;
65  	private JButton resetBtn;
66  	
67  	private JLabel connectionState;
68  	
69  	/***
70  	 * The constructor creates a JPanel for the map view
71  	 * 
72  	 */
73  	public MapViewPanel(MapSocket model, TabbedForm view) {
74  //		this.model = model;
75  		this.view = view;
76  		
77  		setLayout(new BorderLayout());
78  
79  		keyPanel = new JPanel();
80  		keyPanel.setLayout(new FlowLayout());
81  		map = new Map(model, this);
82  
83  		JPanel subMenu = new JPanel();
84  		subMenu.setLayout(new BorderLayout());
85  		subMenu.add(keyPanel, BorderLayout.WEST);
86  		add(map, BorderLayout.CENTER);
87  		add(subMenu, BorderLayout.SOUTH);
88  		
89  		EtchedBorder border = (EtchedBorder)BorderFactory.createEtchedBorder();
90  		
91  //		 1 = Don't follow, 2 = Always inside, 3 = Center on last
92  		String[] elements = {"Always inside", "Center on last", "Don't follow"};
93  		followBox = new JComboBox(elements);
94  //		followBox.setSelected(false);
95  		
96  		zoom = new JRadioButton("");
97  		zoom.setMnemonic(KeyEvent.VK_Z); 
98  		zoom.setBorder(border);
99  		zoomLabel = new JLabel(getImageIcon("viewmag.png"));
100 		
101 		move = new JRadioButton("");
102 		move.setSelected(true);
103 		moveLabel = new JLabel(getImageIcon("move.png"));
104 		
105 		JPanel btnPanel = new JPanel();
106 		btnPanel.setBorder(border);
107 		btnGr = new ButtonGroup();
108 		btnGr.add(zoom);
109 		btnGr.add(move);
110 		btnPanel.add(zoom);
111 		btnPanel.add(zoomLabel);
112 		btnPanel.add(move);
113 		btnPanel.add(moveLabel);
114 		
115 		zoomIn = new JButton(getImageIcon("viewmag+.png"));
116 		zoomIn.setMnemonic(KeyEvent.VK_PLUS); 
117 		zoomIn.setSize(2,2);
118 		zoomOut = new JButton(getImageIcon("viewmag-.png"));
119 		zoomOut.setMnemonic(KeyEvent.VK_MINUS); 
120 		zoomOut.setSize(2,2);
121 		
122 		resetBtn = new JButton("Reset");
123 		resetBtn.setMnemonic(KeyEvent.VK_R);
124 		
125 		keyPanel.add(zoomIn);
126 		keyPanel.add(zoomOut);
127 		keyPanel.add(btnPanel);
128 		keyPanel.add(followBox);
129 		keyPanel.add(resetBtn);
130 
131 		subMenu.add(connectionState = new JLabel(), BorderLayout.EAST);
132 //		manager.register(this);
133 		
134 		new MapViewController(model, this);
135 		model.addListener(this);
136 	}
137 	
138 	/*** Adds listener to zoomInBtn */
139 	public void addZoomInBtnListener(ActionListener listener) {
140 		zoomIn.addActionListener(listener);
141 	}
142 	/*** Adds listener to zoomOutBtn */
143 	public void addZoomOutBtnListener(ActionListener listener) {
144 		zoomOut.addActionListener(listener);
145 	}
146 	
147 	public void addZoomBtnListener(MouseListener listener) {
148 		zoom.addMouseListener(listener);
149 		zoomLabel.addMouseListener(listener);
150 	}
151 	
152 	public void addMoveBtnListener(MouseListener listener) {
153 		move.addMouseListener(listener);
154 		moveLabel.addMouseListener(listener);
155 	}
156 	
157 	public void addFollowBtnListener(ItemListener listener) {
158 		followBox.addItemListener(listener);
159 	}
160 	
161 	public void addResetBtnListener(ActionListener listener) {
162 		resetBtn.addActionListener(listener);
163 	}
164 	
165 	/*** Asks server for coordinates to selected route */
166 	public void setRoute(boolean realtime, Route route) {
167 		setRoute(route);
168 		this.realtime = realtime;
169 //		map.setRoute(route);
170 		if (realtime){
171 			map.setRealtime(realtime);
172 //			model.setRoute(route);
173 		}
174 	}
175 	
176 	public void setState(String state) {
177 		connectionState.setText(state);
178 	}
179 	
180 	public void setFollow(int follow){
181 		map.setFollow(follow);
182 	}
183 	
184 	/*** Called from model when route is recieved from server */
185 	public void routeReceived(int routeId, List<Coordinate> coords) {
186 		if (coords.size() == 0){
187 			setState("Recieved empty route");
188 	//		view.setRoute(coords);
189 			return;
190 		}
191 		
192 		map.setCoordList(coords);
193 		view.setRoute(coords);
194 	}
195 	
196 	/*** {@inheritDoc} */
197 //	@Override
198 	public void connectionUpdate(ConnectionState state) {
199 		switch (state){
200 //		case CONNECTED:
201 //			setState("Connected to server");
202 //			break;
203 //		case AUTH_SUCCESS:
204 //			setState("Connected to server");
205 //			break;
206 //		case AUTH_FAILED:
207 //			setState("No connection");
208 //			break;
209 		case DISCONNECTED:
210 			setState("Disconnected from server");
211 			break;
212 		case WATCHING: // FIXME Move to routeUpdate.
213 			map.setRealtime(false);
214 			map.repaint();
215 			view.setInfo();
216 			setState("Route is not beeing tracked");
217 			break;
218 		case TRACKING: // FIXME Move to routeUpdate.
219 			map.setRealtime(true);
220 			setState("Route is now beeing tracked");
221 			break;
222 		}
223 	}
224 	
225 	/*** Unimplemented methods from interface */
226 	public void usersReceived(List<User> users) { }
227 	public void routeList(List<Route> routes) {	}
228 	public void coordReceived(int routeId, Coordinate coord) { }
229 	public void routeUpdate(int routeId, RouteState state) { }
230 	public void invalidMessage(String message) { }
231 	public void socketError(IOException e) { }
232 	public void userReceived(User user) { }
233 	public void coordsReceived(List<Coordinate> coords) { }
234 	
235 	/*** Sets mouseKlick to zoom in on klicked position*/
236 	public void setZoom() {
237 		zoom.setSelected(true);
238 		getMap().setZoom();
239 	}
240 	
241 	/*** Sets mouseKlick to center on selected position */
242 	public void setMove() {	
243 		move.setSelected(true);
244 		getMap().setMove();
245 	}
246 	
247 	/*** Resets map to initial state */
248 	public void resetMap(){
249 		map.reset();
250 	}
251 
252 
253 }