View Javadoc

1   /* OpenLogViewer
2    *
3    * Copyright 2011
4    *
5    * This file is part of the OpenLogViewer project.
6    *
7    * OpenLogViewer software is free software: you can redistribute it and/or modify
8    * it under the terms of the GNU General Public License as published by
9    * the Free Software Foundation, either version 3 of the License, or
10   * (at your option) any later version.
11   *
12   * OpenLogViewer software is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   * GNU General Public License for more details.
16   *
17   * You should have received a copy of the GNU General Public License
18   * along with any OpenLogViewer software.  If not, see http://www.gnu.org/licenses/
19   *
20   * I ask that if you make any changes to this file you fork the code on github.com!
21   *
22   */
23  
24  package org.diyefi.openlogviewer;
25  
26  import java.awt.Dimension;
27  import java.awt.FlowLayout;
28  import java.awt.event.MouseAdapter;
29  import java.awt.event.MouseEvent;
30  
31  import javax.swing.Box;
32  import javax.swing.Icon;
33  import javax.swing.ImageIcon;
34  import javax.swing.JButton;
35  import javax.swing.JPanel;
36  
37  public class NavBarPanel extends JPanel {
38  	private static final long serialVersionUID = 1L;
39  
40  	private static final int PREFERRED_WIDTH = 800;
41  	private static final int PREFERRED_HEIGHT = 18;
42  	private static final int SPACER_WIDTH = 16;
43  
44  	private static final String BUTTON_DIR = "buttons/";
45  
46  	private static final Icon PLAY_ICON = new ImageIcon(NavBarPanel.class.getResource(BUTTON_DIR + Images.PLAY));
47  	private static final Icon PAUSE_ICON = new ImageIcon(NavBarPanel.class.getResource(BUTTON_DIR + Images.PAUSE));
48  
49  	private final JButton playAndPause = new JButton();
50  
51  	public NavBarPanel() {
52  		setName(NavBarPanel.class.getSimpleName());
53  		setPreferredSize(new Dimension(PREFERRED_WIDTH, PREFERRED_HEIGHT));
54  		setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
55  
56  		setupZoomButtons();
57  		add(Box.createHorizontalStrut(SPACER_WIDTH));
58  		setupPlayButtons();
59  		add(Box.createHorizontalStrut(SPACER_WIDTH));
60  		setupNavigationButtons();
61  		add(Box.createHorizontalStrut(SPACER_WIDTH));
62  		setupFileButtons();
63  	}
64  
65  	private void setupZoomButtons() {
66  		final JButton zoomIn = new JButton();
67  		zoomIn.addMouseListener(new MouseAdapter() {
68  			@Override
69  			public void mouseReleased(final MouseEvent e) {
70  				if (zoomIn.contains(e.getPoint())) {
71  					zoomInButtonMouseReleased();
72  				}
73  			}
74  		});
75  		setupAndAddButton(zoomIn, Images.ZOOM_IN);
76  
77  		final JButton zoomResetRatio = new JButton();
78  		zoomResetRatio.addMouseListener(new MouseAdapter() {
79  			@Override
80  			public void mouseReleased(final MouseEvent e) {
81  				if (zoomResetRatio.contains(e.getPoint())) {
82  					zoomResetRatioButtonMouseReleased();
83  				}
84  			}
85  		});
86  		setupAndAddButton(zoomResetRatio, Images.ZOOM_RESET_RATIO);
87  
88  		final JButton zoomResetFit = new JButton();
89  		zoomResetFit.addMouseListener(new MouseAdapter() {
90  			@Override
91  			public void mouseReleased(final MouseEvent e) {
92  				if (zoomResetFit.contains(e.getPoint())) {
93  					zoomResetFitButtonMouseReleased();
94  				}
95  			}
96  		});
97  		setupAndAddButton(zoomResetFit, Images.ZOOM_RESET_FIT);
98  
99  		final JButton zoomOut = new JButton();
100 		zoomOut.addMouseListener(new MouseAdapter() {
101 			@Override
102 			public void mouseReleased(final MouseEvent e) {
103 				if (zoomOut.contains(e.getPoint())) {
104 					zoomOutButtonMouseReleased();
105 				}
106 			}
107 		});
108 		setupAndAddButton(zoomOut, Images.ZOOM_OUT);
109 	}
110 
111 	private void setupPlayButtons() {
112 		final JButton slowDown = new JButton();
113 		slowDown.addMouseListener(new MouseAdapter() {
114 			@Override
115 			public void mouseReleased(final MouseEvent e) {
116 				if (slowDown.contains(e.getPoint())) {
117 					slowDownButtonMouseReleased();
118 				}
119 			}
120 		});
121 		setupAndAddButton(slowDown, Images.SLOW_DOWN);
122 
123 		final JButton resetPlaySpeed = new JButton();
124 		resetPlaySpeed.addMouseListener(new MouseAdapter() {
125 			@Override
126 			public void mouseReleased(final MouseEvent e) {
127 				if (resetPlaySpeed.contains(e.getPoint())) {
128 					resetPlaySpeedButtonMouseReleased();
129 				}
130 			}
131 		});
132 		setupAndAddButton(resetPlaySpeed, Images.RESET_SPEED);
133 
134 		playAndPause.addMouseListener(new MouseAdapter() {
135 			@Override
136 			public void mouseReleased(final MouseEvent e) {
137 				if (playAndPause.contains(e.getPoint())) {
138 					pausePlayButtonMouseReleased();
139 				}
140 			}
141 		});
142 		setupAndAddButton(playAndPause, Images.PLAY);
143 
144 		final JButton speedUp = new JButton();
145 		speedUp.addMouseListener(new MouseAdapter() {
146 			@Override
147 			public void mouseReleased(final MouseEvent e) {
148 				if (speedUp.contains(e.getPoint())) {
149 					speedUpButtonMouseReleased();
150 				}
151 			}
152 		});
153 		setupAndAddButton(speedUp, Images.SPEED_UP);
154 	}
155 
156 	private void setupNavigationButtons() {
157 		final JButton moveToBeginning = new JButton();
158 		moveToBeginning.addMouseListener(new MouseAdapter() {
159 			@Override
160 			public void mouseReleased(final MouseEvent e) {
161 				if (moveToBeginning.contains(e.getPoint())) {
162 					moveToBeginningButtonMouseReleased();
163 				}
164 			}
165 		});
166 		setupAndAddButton(moveToBeginning, Images.MOVE_TO_BEGINNING);
167 
168 		final JButton moveBackwardCoarse = new JButton();
169 		moveBackwardCoarse.addMouseListener(new MouseAdapter() {
170 			@Override
171 			public void mouseReleased(final MouseEvent e) {
172 				if (moveBackwardCoarse.contains(e.getPoint())) {
173 					moveBackwardCoarseButtonMouseReleased();
174 				}
175 			}
176 		});
177 		setupAndAddButton(moveBackwardCoarse, Images.MOVE_BACKWARD_COARSE);
178 
179 		final JButton moveBackward = new JButton();
180 		moveBackward.addMouseListener(new MouseAdapter() {
181 			@Override
182 			public void mouseReleased(final MouseEvent e) {
183 				if (moveBackward.contains(e.getPoint())) {
184 					moveBackwardButtonMouseReleased();
185 				}
186 			}
187 		});
188 		setupAndAddButton(moveBackward, Images.MOVE_BACKWARD);
189 
190 		final JButton moveToCenter = new JButton();
191 		moveToCenter.addMouseListener(new MouseAdapter() {
192 			@Override
193 			public void mouseReleased(final MouseEvent e) {
194 				if (moveToCenter.contains(e.getPoint())) {
195 					moveToCenterButtonMouseReleased();
196 				}
197 			}
198 		});
199 		setupAndAddButton(moveToCenter, Images.MOVE_TO_CENTER);
200 
201 		final JButton moveForward = new JButton();
202 		moveForward.addMouseListener(new MouseAdapter() {
203 			@Override
204 			public void mouseReleased(final MouseEvent e) {
205 				if (moveForward.contains(e.getPoint())) {
206 					moveForwardButtonMouseReleased();
207 				}
208 			}
209 		});
210 		setupAndAddButton(moveForward, Images.MOVE_FORWARD);
211 
212 		final JButton moveForwardCoarse = new JButton();
213 		moveForwardCoarse.addMouseListener(new MouseAdapter() {
214 			@Override
215 			public void mouseReleased(final MouseEvent e) {
216 				if (moveForwardCoarse.contains(e.getPoint())) {
217 					moveForwardCoarseButtonMouseReleased();
218 				}
219 			}
220 		});
221 		setupAndAddButton(moveForwardCoarse, Images.MOVE_FORWARD_COARSE);
222 
223 		final JButton moveToEnd = new JButton();
224 		moveToEnd.addMouseListener(new MouseAdapter() {
225 			@Override
226 			public void mouseReleased(final MouseEvent e) {
227 				if (moveToEnd.contains(e.getPoint())) {
228 					moveToEndButtonMouseReleased();
229 				}
230 			}
231 		});
232 		setupAndAddButton(moveToEnd, Images.MOVE_TO_END);
233 	}
234 
235 	private void setupFileButtons() {
236 		final JButton openFile = new JButton();
237 		openFile.addMouseListener(new MouseAdapter() {
238 			@Override
239 			public void mouseReleased(final MouseEvent e) {
240 				if (openFile.contains(e.getPoint())) {
241 					openButtonMouseReleased();
242 				}
243 			}
244 		});
245 		setupAndAddButton(openFile, Images.OPEN_FILE);
246 
247 		final JButton openLast = new JButton();
248 		openLast.addMouseListener(new MouseAdapter() {
249 			@Override
250 			public void mouseReleased(final MouseEvent e) {
251 				if (openLast.contains(e.getPoint())) {
252 					openLastButtonMouseReleased();
253 				}
254 			}
255 		});
256 		setupAndAddButton(openLast, Images.OPEN_LAST);
257 	}
258 
259 	private void setupAndAddButton(final JButton button, final String iconFileName) {
260 		button.setIcon(new ImageIcon(getClass().getResource(BUTTON_DIR + iconFileName)));
261 		button.setBorder(null);
262 		button.setRequestFocusEnabled(false);
263 		add(button);
264 	}
265 
266 	public final void updatePausePlayButton() {
267 		final boolean playing = OpenLogViewer.getInstance().getEntireGraphingPanel().isPlaying();
268 		if (playing) {
269 			playAndPause.setIcon(PAUSE_ICON);
270 		} else {
271 			playAndPause.setIcon(PLAY_ICON);
272 		}
273 		playAndPause.setBorder(null);
274 	}
275 
276 	/**
277 	 * Modify the state of the PlayableLog zoom in 1 pixel up to 512 pixels
278 	 * @param evt
279 	 */
280 	private void zoomInButtonMouseReleased() {
281 		OpenLogViewer.getInstance().getEntireGraphingPanel().zoomInCoarse();
282 	}
283 
284 	/**
285 	 * Modify the state of the PlayableLog zoom in 1 pixel down to -1024 pixels
286 	 * @param evt
287 	 */
288 	private void zoomOutButtonMouseReleased() {
289 		OpenLogViewer.getInstance().getEntireGraphingPanel().zoomOutCoarse();
290 	}
291 
292 	/**
293 	 * Modify the state of the PlayableLog zoom to exactly 1
294 	 * @param evt
295 	 */
296 	private void zoomResetRatioButtonMouseReleased() {
297 		OpenLogViewer.getInstance().getEntireGraphingPanel().zoomResetRatio();
298 	}
299 
300 	/**
301 	 * Modify the state of the PlayableLog zoom to exactly 1
302 	 * @param evt
303 	 */
304 	private void zoomResetFitButtonMouseReleased() {
305 		OpenLogViewer.getInstance().getEntireGraphingPanel().zoomGraphToFit();
306 	}
307 
308 	/**
309 	 * Slows down the play back speed of the Playable Log
310 	 * @param evt
311 	 */
312 	private void slowDownButtonMouseReleased() {
313 		OpenLogViewer.getInstance().getEntireGraphingPanel().slowDown();
314 	}
315 
316 	/**
317 	 * Sets the play back speed of the Playable Log to the original base speed
318 	 * @param evt
319 	 */
320 	private void resetPlaySpeedButtonMouseReleased() {
321 		OpenLogViewer.getInstance().getEntireGraphingPanel().resetPlaySpeed();
322 	}
323 
324 	/**
325 	 * Modifies the state of the PlayableLog to begin playing if paused, or pause if playing
326 	 * @param evt
327 	 */
328 	private void pausePlayButtonMouseReleased() {
329 		final boolean playing = OpenLogViewer.getInstance().getEntireGraphingPanel().isPlaying();
330 		if (playing) {
331 			OpenLogViewer.getInstance().getEntireGraphingPanel().pause();
332 		} else {
333 			OpenLogViewer.getInstance().getEntireGraphingPanel().play();
334 		}
335 	}
336 
337 	/**
338 	 * Speeds up the play back speed of the PlayableLog
339 	 * @param evt
340 	 */
341 	private void speedUpButtonMouseReleased() {
342 		OpenLogViewer.getInstance().getEntireGraphingPanel().speedUp();
343 	}
344 
345 	/**
346 	 * Moves the Playable Log to the beginning position
347 	 * @param evt
348 	 */
349 	private void moveToBeginningButtonMouseReleased() {
350 		OpenLogViewer.getInstance().getEntireGraphingPanel().moveToBeginning();
351 	}
352 
353 	/**
354 	 * Moves the Playable Log backward a large amount
355 	 * @param evt
356 	 */
357 	private void moveBackwardCoarseButtonMouseReleased() {
358 		OpenLogViewer.getInstance().getEntireGraphingPanel().moveBackwardCoarse();
359 	}
360 
361 	/**
362 	 * Moves the Playable Log backward a small amount
363 	 * @param evt
364 	 */
365 	private void moveBackwardButtonMouseReleased() {
366 		OpenLogViewer.getInstance().getEntireGraphingPanel().moveBackward();
367 	}
368 
369 	/**
370 	 * Centers the Playable Log in the display
371 	 * @param evt
372 	 */
373 	private void moveToCenterButtonMouseReleased() {
374 		OpenLogViewer.getInstance().getEntireGraphingPanel().centerGraphPosition();
375 	}
376 
377 	/**
378 	 * Moves the Playable Log forward a small amount
379 	 * @param evt
380 	 */
381 	private void moveForwardButtonMouseReleased() {
382 		OpenLogViewer.getInstance().getEntireGraphingPanel().moveForward();
383 	}
384 
385 	/**
386 	 * Moves the Playable Log forward a large amount
387 	 * @param evt
388 	 */
389 	private void moveForwardCoarseButtonMouseReleased() {
390 		OpenLogViewer.getInstance().getEntireGraphingPanel().moveForwardCoarse();
391 	}
392 
393 	/**
394 	 * Moves the Playable Log to the ending position
395 	 * @param evt
396 	 */
397 	private void moveToEndButtonMouseReleased() {
398 		OpenLogViewer.getInstance().getEntireGraphingPanel().moveToEnd();
399 	}
400 
401 	/**
402 	 * Allow the user to choose a new log to open
403 	 * @param evt
404 	 */
405 	private void openButtonMouseReleased() {
406 		OpenLogViewer.getInstance().exitFullScreen();
407 		OpenLogViewer.getInstance().openChosenFile();
408 	}
409 
410 	/**
411 	 * Re-open the last log file that was opened/loaded
412 	 * @param evt
413 	 */
414 	private void openLastButtonMouseReleased() {
415 		OpenLogViewer.getInstance().exitFullScreen();
416 		OpenLogViewer.getInstance().openLastFile();
417 	}
418 }