diff options
Diffstat (limited to 'altosuilib/AltosFlightStatsTable.java')
| -rw-r--r-- | altosuilib/AltosFlightStatsTable.java | 141 | 
1 files changed, 99 insertions, 42 deletions
| diff --git a/altosuilib/AltosFlightStatsTable.java b/altosuilib/AltosFlightStatsTable.java index 2f46f231..415c0244 100644 --- a/altosuilib/AltosFlightStatsTable.java +++ b/altosuilib/AltosFlightStatsTable.java @@ -16,12 +16,12 @@   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.   */ -package org.altusmetrum.altosuilib_11; +package org.altusmetrum.altosuilib_12;  import java.awt.*;  import javax.swing.*;  import java.util.*; -import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altoslib_12.*;  public class AltosFlightStatsTable extends JComponent implements AltosFontListener {  	GridBagLayout	layout; @@ -87,13 +87,19 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen  		return String.format("%s %4d° %9.6f'", h, deg, min);  	} -	public AltosFlightStatsTable(AltosFlightStats stats) { -		layout = new GridBagLayout(); - -		setLayout(layout); +	public void set_stats(AltosFlightStats stats) {  		int y = 0; -		new FlightStat(layout, y++, "Serial", String.format("%d", stats.serial)); -		new FlightStat(layout, y++, "Flight", String.format("%d", stats.flight)); +		if (stats.serial != AltosLib.MISSING) { +			if (stats.product != null && stats.firmware_version != null) +				new FlightStat(layout, y++, "Device", +					       stats.product, +					       String.format("version %s", stats.firmware_version), +					       String.format("serial %d", stats.serial)); +			else +				new FlightStat(layout, y++, "Serial", String.format("%d", stats.serial)); +		} +		if (stats.flight != AltosLib.MISSING) +			new FlightStat(layout, y++, "Flight", String.format("%d", stats.flight));  		if (stats.year != AltosLib.MISSING && stats.hour != AltosLib.MISSING)  			new FlightStat(layout, y++, "Date/Time",  				       String.format("%04d-%02d-%02d", stats.year, stats.month, stats.day), @@ -108,61 +114,112 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen  		}  		if (stats.max_height != AltosLib.MISSING) {  			new FlightStat(layout, y++, "Maximum height", -				       String.format("%5.0f m", stats.max_height), +				       String.format("%6.1f m", stats.max_height),  				       String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_height)));  		}  		if (stats.max_gps_height != AltosLib.MISSING) {  			new FlightStat(layout, y++, "Maximum GPS height", -				       String.format("%5.0f m", stats.max_gps_height), +				       String.format("%6.1f m", stats.max_gps_height),  				       String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_gps_height)));  		} -		new FlightStat(layout, y++, "Maximum speed", -			       String.format("%5.0f m/s", stats.max_speed), -			       String.format("%5.0f fps", AltosConvert.mps_to_fps(stats.max_speed)), -			       String.format("Mach %4.1f", AltosConvert.meters_to_mach(stats.max_speed))); +		if (stats.max_speed != AltosLib.MISSING) { +			new FlightStat(layout, y++, "Maximum speed", +				       String.format("%6.1f m/s", stats.max_speed), +				       String.format("%5.0f fps", AltosConvert.mps_to_fps(stats.max_speed)), +				       String.format("Mach %4.1f", AltosConvert.meters_to_mach(stats.max_speed))); +		}  		if (stats.max_acceleration != AltosLib.MISSING)  			new FlightStat(layout, y++, "Maximum boost acceleration", -				       String.format("%5.0f m/s²", stats.max_acceleration), +				       String.format("%6.1f m/s²", stats.max_acceleration),  				       String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.max_acceleration)), -				       String.format("%5.0f G", AltosConvert.meters_to_g(stats.max_acceleration))); +				       String.format("%6.2f G", AltosConvert.meters_to_g(stats.max_acceleration)));  		if (stats.state_accel[AltosLib.ao_flight_boost] != AltosLib.MISSING)  			new FlightStat(layout, y++, "Average boost acceleration", -				       String.format("%5.0f m/s²", stats.state_accel[AltosLib.ao_flight_boost]), +				       String.format("%6.1f m/s²", stats.state_accel[AltosLib.ao_flight_boost]),  				       String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.state_accel[AltosLib.ao_flight_boost])), -				       String.format("%5.0f G", AltosConvert.meters_to_g(stats.state_accel[AltosLib.ao_flight_boost]))); -		if (stats.state_speed[AltosLib.ao_flight_drogue] != AltosLib.MISSING) -			new FlightStat(layout, y++, "Drogue descent rate", -				       String.format("%5.0f m/s", stats.state_speed[AltosLib.ao_flight_drogue]), -				       String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_drogue]))); +				       String.format("%6.2f G", AltosConvert.meters_to_g(stats.state_accel[AltosLib.ao_flight_boost]))); +		if (stats.state_time[AltosLib.ao_flight_boost] != 0 || stats.state_time[AltosLib.ao_flight_fast] != 0 || stats.state_time[AltosLib.ao_flight_coast] != 0) { + +			double	boost_time = stats.state_time[AltosLib.ao_flight_boost]; +			double	fast_time = stats.state_time[AltosLib.ao_flight_fast]; +			double	coast_time = stats.state_time[AltosLib.ao_flight_coast]; + +			if (fast_time > 0) { +				new FlightStat(layout, y++, "Ascent time", +					       String.format("%6.1f s %s", boost_time, +							     AltosLib.state_name(AltosLib.ao_flight_boost)), +					       String.format("%6.1f s %s", fast_time, +							     AltosLib.state_name(AltosLib.ao_flight_fast)), +					       String.format("%6.1f s %s", coast_time, +							     AltosLib.state_name(AltosLib.ao_flight_coast))); +			} else { +				new FlightStat(layout, y++, "Ascent time", +					       String.format("%6.1f s %s", boost_time, +							     AltosLib.state_name(AltosLib.ao_flight_boost)), +					       String.format("%6.1f s %s", coast_time, +							     AltosLib.state_name(AltosLib.ao_flight_coast))); +			} +		} +		if (stats.state_speed[AltosLib.ao_flight_drogue] != AltosLib.MISSING) { +			String	label; + +			if (stats.state_speed[AltosLib.ao_flight_main] == AltosLib.MISSING) +				label = "Descent rate"; +			else +				label = "Drogue descent rate"; +			new FlightStat(layout, y++, label, +				       String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_drogue]), +				       String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_drogue]))); +		}  		if (stats.state_speed[AltosLib.ao_flight_main] != AltosLib.MISSING)  			new FlightStat(layout, y++, "Main descent rate", -				       String.format("%5.0f m/s", stats.state_speed[AltosLib.ao_flight_main]), -				       String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_main]))); -		if (stats.state_start[AltosLib.ao_flight_boost] < stats.state_end[AltosLib.ao_flight_coast]) -			new FlightStat(layout, y++, "Ascent time", -				       String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_boost] - stats.state_start[AltosLib.ao_flight_boost], -						     AltosLib.state_name(AltosLib.ao_flight_boost)), -				       String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_fast] - stats.state_start[AltosLib.ao_flight_fast], -						     AltosLib.state_name(AltosLib.ao_flight_fast)), -				       String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_coast] - stats.state_start[AltosLib.ao_flight_coast], -						     AltosLib.state_name(AltosLib.ao_flight_coast))); -		if (stats.state_start[AltosLib.ao_flight_drogue] < stats.state_end[AltosLib.ao_flight_main]) -			new FlightStat(layout, y++, "Descent time", -				       String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_drogue] - stats.state_start[AltosLib.ao_flight_drogue], -						     AltosLib.state_name(AltosLib.ao_flight_drogue)), -				       String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_main] - stats.state_start[AltosLib.ao_flight_main], -						     AltosLib.state_name(AltosLib.ao_flight_main))); -		if (stats.state_start[AltosLib.ao_flight_boost] < stats.state_end[AltosLib.ao_flight_main]) +				       String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_main]), +				       String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_main]))); +		if (stats.state_time[AltosLib.ao_flight_drogue] != 0 || stats.state_time[AltosLib.ao_flight_main] != 0) { +			double	drogue_duration = stats.state_time[AltosLib.ao_flight_drogue]; +			double	main_duration = stats.state_time[AltosLib.ao_flight_main]; +			double	duration = drogue_duration + main_duration; + +			if (drogue_duration > 0 && main_duration > 0) { +				new FlightStat(layout, y++, "Descent time", +					       String.format("%6.1f s %s", drogue_duration, +							     AltosLib.state_name(AltosLib.ao_flight_drogue)), +					       String.format("%6.1f s %s", main_duration, +							     AltosLib.state_name(AltosLib.ao_flight_main))); +			} else if (duration > 0) { +				new FlightStat(layout, y++, "Descent time", +					       String.format("%6.1f s", duration)); +			} +		} +		if (stats.landed_time > stats.boost_time)  			new FlightStat(layout, y++, "Flight time", -				       String.format("%6.1f s", stats.state_end[AltosLib.ao_flight_main] - -						     stats.state_start[AltosLib.ao_flight_boost])); -		if (stats.has_gps) { +				       String.format("%6.1f s", stats.landed_time - stats.boost_time)); +		if (stats.has_gps && stats.pad_lat != AltosLib.MISSING) {  			new FlightStat(layout, y++, "Pad location",  				       pos(stats.pad_lat,"N","S"),  				       pos(stats.pad_lon,"E","W")); +		} +		if (stats.has_gps && stats.lat != AltosLib.MISSING) {  			new FlightStat(layout, y++, "Last reported location",  				       pos(stats.lat,"N","S"),  				       pos(stats.lon,"E","W"));  		}  	} + +	public void tell_closing() { +		AltosUIPreferences.unregister_font_listener(this); +	} + +	public AltosFlightStatsTable() { +		layout = new GridBagLayout(); + +		setLayout(layout); + +		AltosUIPreferences.register_font_listener(this); +	} + +	public AltosFlightStatsTable(AltosFlightStats stats) { +		this(); +		set_stats(stats); +	}  } | 
