package net.sf.openrocket.android.rocket; import net.sf.openrocket.R; import net.sf.openrocket.aerodynamics.AerodynamicCalculator; import net.sf.openrocket.aerodynamics.BarrowmanCalculator; import net.sf.openrocket.aerodynamics.FlightConditions; import net.sf.openrocket.aerodynamics.WarningSet; import net.sf.openrocket.android.CurrentRocketHolder; import net.sf.openrocket.android.util.AndroidLogWrapper; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.masscalc.BasicMassCalculator; import net.sf.openrocket.masscalc.MassCalculator; import net.sf.openrocket.masscalc.MassCalculator.MassCalcType; import net.sf.openrocket.rocketcomponent.Configuration; import net.sf.openrocket.rocketcomponent.Rocket; import net.sf.openrocket.rocketcomponent.RocketUtils; import net.sf.openrocket.unit.Unit; import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.util.Coordinate; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.TextView; public class Overview extends Fragment implements SharedPreferences.OnSharedPreferenceChangeListener { /* Calculation of CP and CG */ private AerodynamicCalculator aerodynamicCalculator = new BarrowmanCalculator(); private MassCalculator massCalculator = new BasicMassCalculator(); private MotorConfigSpinner configurationSpinner; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { AndroidLogWrapper.d(Overview.class, "Created View"); View v = inflater.inflate(R.layout.rocket_overview, container, false); configurationSpinner = (MotorConfigSpinner) v.findViewById(R.id.openrocketviewerConfigurationSpinner); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.registerOnSharedPreferenceChangeListener(this); } @Override public void onResume() { super.onResume(); setup(); } @Override public void onDestroy() { super.onDestroy(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) { if ( this.isVisible() ) { setup(); } } private void setup() { final OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument(); Rocket rocket = rocketDocument.getRocket(); // Find the index of the default configuration so we can preselect it. Configuration defaultConfiguration = rocketDocument.getDefaultConfiguration(); configurationSpinner.createAdapter(rocket); AndroidLogWrapper.d(Overview.class, "configurationSpinner = " + configurationSpinner); if ( defaultConfiguration != null ) { configurationSpinner.setSelectedConfiguration(defaultConfiguration.getMotorConfigurationID()); } configurationSpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { /* (non-Javadoc) * @see android.widget.AdapterView.OnItemSelectedListener#onItemSelected(android.widget.AdapterView, android.view.View, int, long) */ @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String selectedConfigId = rocketDocument.getRocket().getMotorConfigurationIDs()[arg2]; Configuration config = new Configuration(rocketDocument.getRocket()); config.setMotorConfigurationID(selectedConfigId); Coordinate cp = aerodynamicCalculator.getWorstCP(config, new FlightConditions(config), new WarningSet()); Coordinate cg = massCalculator.getCG(config, MassCalcType.LAUNCH_MASS); Unit lengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit(); Unit massUnit = UnitGroup.UNITS_MASS.getDefaultUnit(); Unit stabilityUnit = UnitGroup.stabilityUnits(config).getDefaultUnit(); ((TextView)getActivity().findViewById(R.id.openrocketviewerCP)).setText(lengthUnit.toStringUnit(cp.x)); ((TextView)getActivity().findViewById(R.id.openrocketviewerCG)).setText(lengthUnit.toStringUnit(cg.x)); ((TextView)getActivity().findViewById(R.id.openrocketviewerLiftOffWeight)).setText(massUnit.toStringUnit(cg.weight)); ((TextView)getActivity().findViewById(R.id.openrocketviewerStabilityMargin)).setText(stabilityUnit.toStringUnit(cp.x-cg.x)); } /* (non-Javadoc) * @see android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(android.widget.AdapterView) */ @Override public void onNothingSelected(AdapterView<?> arg0) { ((TextView)getActivity().findViewById(R.id.openrocketviewerCP)).setText(""); ((TextView)getActivity().findViewById(R.id.openrocketviewerCG)).setText(""); ((TextView)getActivity().findViewById(R.id.openrocketviewerLiftOffWeight)).setText(""); ((TextView)getActivity().findViewById(R.id.openrocketviewerStabilityMargin)).setText(""); } }); Unit lengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit(); Unit massUnit = UnitGroup.UNITS_MASS.getDefaultUnit(); Coordinate cg = RocketUtils.getCG(rocket, MassCalcType.NO_MOTORS); double length = RocketUtils.getLength(rocket); ((TextView)getActivity().findViewById(R.id.openrocketviewerDesigner)).setText(rocket.getDesigner()); ((TextView)getActivity().findViewById(R.id.openrocketviewerLength)).setText(lengthUnit.toStringUnit(length)); ((TextView)getActivity().findViewById(R.id.openrocketviewerMass)).setText(massUnit.toStringUnit(cg.weight)); ((TextView)getActivity().findViewById(R.id.openrocketviewerStageCount)).setText(String.valueOf(rocket.getStageCount())); } }