1   package org.wcb.gui.forms.e6b;
2   
3   import org.wcb.e6b.HeadingGroundspeed;
4   import org.wcb.e6b.E6bConverter;
5   import org.wcb.gui.forms.e6b.event.CalculateFormActionListener;
6   
7   import javax.swing.*;
8   import java.awt.*;
9   
10  /**
11   * <small>
12   * <p/>
13   * Copyright (c)  2006  wbogaardt.
14   * This library is free software; you can redistribute it and/or
15   * modify it under the terms of the GNU Lesser General Public
16   * License as published by the Free Software Foundation; either
17   * version 2.1 of the License, or (at your option) any later version.
18   *
19   * This library is distributed in the hope that it will be useful,
20   * but WITHOUT ANY WARRANTY; without even the implied warranty of
21   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22   * Lesser General Public License for more details.
23   *
24   * You should have received a copy of the GNU Lesser General Public
25   * License along with this library; if not, write to the Free Software
26   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
27   * <p/>
28   * $File:  $ <br>
29   * $Change:  $ submitted by $Author: wbogaardt $ at $DateTime: Sep 18, 2006 10:29:36 AM $ <br>
30   * </small>
31   *
32   * @author wbogaardt
33   *         Display's knowncross wind calculation  for Course, Ground speed,
34   * and wind correction angle
35   */
36  
37  public class HeadingGroundspeedPanel extends JPanel implements ICalculateForm{
38  
39      private JTextField trueCourse;
40      private JTextField trueAirspeed;
41      private JTextField windSpeed;
42      private JTextField windDirection;
43      private JButton calculateButton;
44      private JButton clearButton;
45      private JTextField headingResults;
46      private JTextField groundspeedResults;
47      private JTextField wcaResults;
48  
49      public HeadingGroundspeedPanel() {
50          setBorder(BorderFactory.createTitledBorder("Wind Correction Angle(Course)"));
51          initComponents();
52      }
53  
54      public void clearForm() {
55          trueCourse.setText(null);
56          trueAirspeed.setText(null);
57          windSpeed.setText(null);
58          windDirection.setText(null);
59      }
60  
61      private void initComponents() {
62          trueCourse = new JTextField(5);
63          trueAirspeed = new JTextField(5);
64          windSpeed = new JTextField(5);
65          windDirection = new JTextField(5);
66          calculateButton = new JButton("Calculate Course, GS and WCA");
67          clearButton = new JButton("Clear Course, GS and WCA Values");
68          headingResults = new JTextField(10);
69          groundspeedResults = new JTextField(10);
70          wcaResults = new JTextField(10);
71          calculateButton.addActionListener(new CalculateFormActionListener(this));
72          clearButton.addActionListener(new CalculateFormActionListener(this));
73  
74  
75          setLayout(new GridBagLayout());
76          GridBagConstraints gridBagConstraints;
77  
78          gridBagConstraints = new GridBagConstraints();
79          gridBagConstraints.gridx = 0;
80          gridBagConstraints.gridy = 1;
81          gridBagConstraints.anchor = GridBagConstraints.WEST;
82          add(new JLabel("Course"), gridBagConstraints);
83  
84          gridBagConstraints.gridx = 1;
85          gridBagConstraints.gridy = 1;
86          gridBagConstraints.anchor = GridBagConstraints.WEST;
87          add(trueCourse, gridBagConstraints);
88  
89          gridBagConstraints.gridx = 0;
90          gridBagConstraints.gridy = 2;
91          gridBagConstraints.anchor = GridBagConstraints.WEST;
92          add(new JLabel("True Airspeed"), gridBagConstraints);
93  
94          gridBagConstraints.gridx = 1;
95          gridBagConstraints.gridy = 2;
96          gridBagConstraints.anchor = GridBagConstraints.WEST;
97          add(trueAirspeed, gridBagConstraints);
98  
99          gridBagConstraints.gridx = 0;
100         gridBagConstraints.gridy = 3;
101         gridBagConstraints.anchor = GridBagConstraints.WEST;
102         add(new JLabel("Wind Speed"), gridBagConstraints);
103 
104         gridBagConstraints.gridx = 1;
105         gridBagConstraints.gridy = 3;
106         gridBagConstraints.anchor = GridBagConstraints.WEST;
107         add(windSpeed, gridBagConstraints);
108 
109         gridBagConstraints.gridx = 0;
110         gridBagConstraints.gridy = 4;
111         gridBagConstraints.anchor = GridBagConstraints.WEST;
112         add(new JLabel("Wind Direction"), gridBagConstraints);
113 
114         gridBagConstraints.gridx = 1;
115         gridBagConstraints.gridy = 4;
116         gridBagConstraints.anchor = GridBagConstraints.WEST;
117         add(windDirection, gridBagConstraints);
118 
119         //standard calculate and reset buttons
120         gridBagConstraints.gridx = 0;
121         gridBagConstraints.gridy = 5;
122         gridBagConstraints.gridwidth = 2;
123         gridBagConstraints.anchor = GridBagConstraints.WEST;
124         add(calculateButton, gridBagConstraints);
125 
126         gridBagConstraints = new GridBagConstraints();
127         gridBagConstraints.gridx = 2;
128         gridBagConstraints.gridy = 5;
129         gridBagConstraints.anchor = GridBagConstraints.WEST;
130         add(clearButton, gridBagConstraints);
131 
132         gridBagConstraints.gridx = 0;
133         gridBagConstraints.gridy = 6;
134         gridBagConstraints.gridwidth = 2;
135         gridBagConstraints.anchor = GridBagConstraints.WEST;
136         add(new JLabel("Calculated Heading="), gridBagConstraints);
137 
138         gridBagConstraints = new GridBagConstraints();
139         gridBagConstraints.gridx = 2;
140         gridBagConstraints.gridy = 6;
141         gridBagConstraints.anchor = GridBagConstraints.WEST;
142         add(headingResults, gridBagConstraints);
143 
144         gridBagConstraints.gridx = 0;
145         gridBagConstraints.gridy = 7;
146         gridBagConstraints.gridwidth = 2;
147         gridBagConstraints.anchor = GridBagConstraints.WEST;
148         add(new JLabel("Calculated Groundspeed="), gridBagConstraints);
149 
150         gridBagConstraints = new GridBagConstraints();
151         gridBagConstraints.gridx = 2;
152         gridBagConstraints.gridy = 7;
153         gridBagConstraints.anchor = GridBagConstraints.WEST;
154         add(groundspeedResults, gridBagConstraints);
155 
156         gridBagConstraints.gridx = 0;
157         gridBagConstraints.gridy = 8;
158         gridBagConstraints.gridwidth = 2;
159         gridBagConstraints.anchor = GridBagConstraints.WEST;
160         add(new JLabel("Wind correction angle="), gridBagConstraints);
161 
162         gridBagConstraints = new GridBagConstraints();
163         gridBagConstraints.gridx = 2;
164         gridBagConstraints.gridy = 8;
165         gridBagConstraints.anchor = GridBagConstraints.WEST;
166         add(wcaResults, gridBagConstraints);
167     }
168 
169     public Integer getTrueAirspeed() {
170         int returnValue;
171         try {
172             returnValue = Integer.parseInt(trueAirspeed.getText());
173         } catch (NumberFormatException nfe) {
174             returnValue = 0;
175         }
176         return returnValue;
177     }
178 
179     public void setTrueAirspeed(int trueAirspeed) {
180         this.trueAirspeed.setText(trueAirspeed + "");
181     }
182 
183     public Integer getWindSpeed() {
184         int returnValue;
185         try {
186             returnValue = Integer.parseInt(windSpeed.getText());
187         } catch (NumberFormatException nfe) {
188             returnValue = 0;
189         }
190         return returnValue;
191     }
192 
193     public void setWindSpeed(int windSpeed) {
194         this.windSpeed.setText(windSpeed + "");
195     }
196 
197     public Integer getTrueCourse() {
198         int returnValue;
199         try {
200             returnValue = Integer.parseInt(trueCourse.getText());
201         } catch (NumberFormatException nfe) {
202             returnValue = 0;
203         }
204         return returnValue;
205     }
206 
207     public void setTrueCourse(double trueCourse) {
208         this.trueCourse.setText(trueCourse + "");
209     }
210 
211     public Integer getWindDirection() {
212         int returnValue;
213         try {
214             returnValue = Integer.parseInt(windDirection.getText());
215         } catch (NumberFormatException nfe) {
216             returnValue = 0;
217         }
218         return returnValue;
219     }
220 
221     public void setWindDirection(double trueCourse) {
222         this.windDirection.setText(trueCourse + "");
223     }
224 
225     public void calculateResult() {
226         HeadingGroundspeed wind = new HeadingGroundspeed();
227         wind.setWindSpeed(this.getWindSpeed());
228         wind.setWindDirection(this.getWindDirection());
229         wind.setTrueCourse(this.getTrueCourse());
230         wind.setTrueAirspeed(this.getTrueAirspeed());
231         wind.calculate();
232         headingResults.setText(Math.abs(wind.getHeading()) + " degrees");
233         groundspeedResults.setText(Math.abs(wind.getGroundSpeed()) + " knots");
234         wcaResults.setText(E6bConverter.format(wind.getWindCorrectionAngle()) + " degrees");
235     }
236 }